我在 populateViewHolder 中创建了一个删除函数,如下所示:
viewHolder.mView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new AlertDialog.Builder(getContext())
.setTitle("Are you sure?")
.setMessage("Do you want to delete this note?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
mNotesDatabase.child(list_id).removeValue();
notifyDataSetChanged();
notifyItemRemoved(position);
}
})
.setNegativeButton("No", null)
.show();
return true;
}
});
此代码存在于:public void onDataChange(DataSnapshot dataSnapshot).
当我运行我的代码并尝试从列表中删除该项目时,我的应用程序崩溃。但是,它确实删除了数据库本身中的项目。我认为我的应用程序没有FirebaseRecycleAdapter
正确更新。我尝试使用notifydatasetchanged()
,结果一无所获。我也尝试覆盖onChildRemoved
. 但是 onChildRemoved 似乎不是内部的函数FirebaseRecycleAdapter
。我还尝试调用它FirebaseRecycleAdapter
本身,它告诉我它没有初始化。
这是 logCat:
编辑
在此文本下方,您可以根据要求找到整个适配器的代码:
final FirebaseRecyclerAdapter<Notes, NotesViewHolder> notesRecyclerViewAdapter = new FirebaseRecyclerAdapter<Notes, NotesViewHolder>(
Notes.class,
R.layout.feed_note_single_layout,
NotesViewHolder.class,
mNotesDatabase
) {
@Override
protected void populateViewHolder(final NotesViewHolder viewHolder, Notes model, final int position) {
final String list_id = getRef(position).getKey();
mNotesDatabase.child(list_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String title = dataSnapshot.child("title").getValue().toString();
final String message = dataSnapshot.child("message").getValue().toString();
viewHolder.setTitle(title);
viewHolder.setMessage(message);
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent noteIntent = new Intent(getContext(), NotesActivity.class);
noteIntent.putExtra("list_id", list_id);
noteIntent.putExtra("title", title);
noteIntent.putExtra("message", message);
startActivity(noteIntent);
}
});
viewHolder.mView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
new AlertDialog.Builder(getContext())
.setTitle("Are you sure?")
.setMessage("Do you want to delete this note?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mNotesDatabase.child(list_id).removeValue();
notifyItemRemoved(viewHolder.getAdapterPosition());
notifyDataSetChanged();
}
})
.setNegativeButton("No", null)
.show();
return true;
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
mFeedList.setAdapter(notesRecyclerViewAdapter);
我认为可能会出现问题,因为当您删除数据RecyclerView
并调用notifyDataSetChanged()
. 将position
在populateViewHolder
可能是指删除position
。
因此,您应该使用viewHolder.getAdapterPosition()
代替position
.
根据日志,该问题也可能是由onDataChange
in引起的,NoteActivity
请仔细检查。
希望,有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句