【发布时间】:2020-11-25 23:55:48
【问题描述】:
我正在使用 FirestoreRecycler 创建一个任务应用程序。我已经创建了从 RecyclerView 中删除项目的方法,但我不知道如何在 Snackbar 中撤消此操作。
我有一个 Note 类和一个 FirestoreRecycler 来设置我的 Note 和 RecyclerView 功能。
这是我第一次使用 FirestoreUI。
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
public class MainActivity extends AppCompatActivity {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference notebookRef = db.collection("Notebook");
RecyclerView recyclerView;
private NoteAdapter adapter;
CoordinatorLayout coordinatorLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
coordinatorLayout = findViewById(R.id.coordinator);
setUpRecyclerView();
enableSwipeToDeleteAndUndo();
FloatingActionButton buttonAddNote = findViewById(R.id.button_add_note);
buttonAddNote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, NewNoteActivity.class));
}
});
}
public void setUpRecyclerView(){
Query query = notebookRef.orderBy("priority", Query.Direction.DESCENDING);
FirestoreRecyclerOptions<Note> options = new FirestoreRecyclerOptions.Builder<Note>().setQuery(query, Note.class).build();
adapter = new NoteAdapter(options);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
}
public void enableSwipeToDeleteAndUndo(){
SwipeToDeleteCallback swipeToDeleteCallback = new SwipeToDeleteCallback(this) {
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
final int position = viewHolder.getAdapterPosition();
final String item = adapter.getItem(position).toString();
boolean clicked = false;
adapter.deleteItem(viewHolder.getAdapterPosition());
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Nota foi removida da lista " , Snackbar.LENGTH_LONG);
snackbar.setAction("DESFAZER", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.restoreItem(item, position);
recyclerView.scrollToPosition(position);
}
});
snackbar.setActionTextColor(Color.YELLOW);
snackbar.show();
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(swipeToDeleteCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
【问题讨论】:
标签: android firebase android-recyclerview google-cloud-firestore android-snackbar