Android 删除项目时刷新RecyclerView
我创建了一个图书应用程序。我在弹出菜单中设计了cardview,您可以删除该项。我可以删除项目,但它仍然看起来像。我的问题是,当删除项目时,recyclerview不会刷新。你能帮助我吗?我在这里尝试了很多方法,但我无法解决我的问题 您必须在删除项刷新适配器之后Android 删除项目时刷新RecyclerView,android,Android,我创建了一个图书应用程序。我在弹出菜单中设计了cardview,您可以删除该项。我可以删除项目,但它仍然看起来像。我的问题是,当删除项目时,recyclerview不会刷新。你能帮助我吗?我在这里尝试了很多方法,但我无法解决我的问题 您必须在删除项刷新适配器之后 @Override public void onBindViewHolder(final BookViewHolder holder, final int position) { final Upload
@Override
public void onBindViewHolder(final BookViewHolder holder, final int position) {
final Upload uploadCurrent = mUploads.get(position);
holder.iBookName.setText(uploadCurrent.getBookName());
holder.iBookAuthor.setText(uploadCurrent.getBookAuthor());
holder.iBookPublisher.setText(uploadCurrent.getBookPublisher());
/*holder.iBookDesc.setText(uploadCurrent.getBookDesc());*/
Picasso.with(mContext)
.load(uploadCurrent.getBookImage())
.placeholder(R.drawable.blank)
.fit()
.into(holder.iBookImage);
holder.iBookMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popup = new PopupMenu(mContext, holder.iBookMenu);
popup.inflate(R.menu.cardview_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_my_list:
break;
case R.id.delete_my_list:
deleteBook(mUploads.get(position).getBookId());
break;
}
return false;
}
});
popup.show();
}
});
}
private void deleteBook(String id) {
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("Books").child(id);
dR.removeValue();
Toast.makeText(mContext, "Book deleted", Toast.LENGTH_SHORT).show();
}
@Override
public int getItemCount() {
return mUploads.size();
}
}
你应该使用
@Override
public void onBindViewHolder(final BookViewHolder holder, final int position) {
final Upload uploadCurrent = mUploads.get(position);
holder.iBookName.setText(uploadCurrent.getBookName());
holder.iBookAuthor.setText(uploadCurrent.getBookAuthor());
holder.iBookPublisher.setText(uploadCurrent.getBookPublisher());
/*holder.iBookDesc.setText(uploadCurrent.getBookDesc());*/
Picasso.with(mContext)
.load(uploadCurrent.getBookImage())
.placeholder(R.drawable.blank)
.fit()
.into(holder.iBookImage);
holder.iBookMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popup = new PopupMenu(mContext, holder.iBookMenu);
popup.inflate(R.menu.cardview_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_my_list:
break;
case R.id.delete_my_list:
deleteBook(mUploads.get(position).getBookId(),position);
break;
}
return false;
}
});
popup.show();
}
});
}
private void deleteBook(String id,int position) {
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("Books").child(id);
dR.removeValue();
// position of item delete in your adapter model
notifyItemRemoved(position);
Toast.makeText(mContext, "Book deleted", Toast.LENGTH_SHORT).show();
}
在item remove method中。在对您的同一问题感到非常沮丧之后,我修改了我的
RecycleServiceAdapter
以使用ListAdapter
以下是我的RecycleServiceAdapter
的外观:
@Override
public void onClick(View v) {
notifyDataSetChanged()
}
并调用adapter.submitList(您的列表)代码>列表随时更新
在我的例子中,我在我的OnDataChange
回调中调用submitList
我遵循了这一点。在RecyclerView.Adapter中有许多方法。您可以使用notifyItemDeletedplease选择最佳答案<代码>已删除(位置)
是必需的int,但我的是Stringprivate void deleteBook(String id)
如何解决这一问题?如何更改此行-deleteBook(mUploads.get(position.getBookId(),position);它刷新了,但增加了一个新的。不会出现在database@MustafaKemalÖz你确定这个代码是db的删除项吗?DatabaseReference dR=FirebaseDatabase.getInstance().getReference(“书籍”).child(id);removeValue博士()@Mustafa KemalÖz太好了!你可以选择我的答案是最好的答案(选择左边的勾号)
public class RecyclerViewAdapter extends ListAdapter<YourObjectType, RecyclerViewAdapter.ViewHolder> {
...
public RecyclerViewAdapter() {
super(DIFF_CALLBACK);
...
}
public static final DiffUtil.ItemCallback<YourObjectType> DIFF_CALLBACK = new DiffUtil.ItemCallback<YourObjectType>() {
@Override
public boolean areItemsTheSame(@NonNull YourObjectType oldItem, @NonNull YourObjectType newItem) {
return oldItem.compareTo(newItem)==0; //I added a compareTo method to myObjectClass so that I can compare them.
}
@Override
public boolean areContentsTheSame(@NonNull YourObjectType oldItem, @NonNull YourObjectType newItem) {
return oldItem.compareTo(newItem)==0; //I added a compareTo method to myObjectClass so that I can compare them.
}
};
@NonNull
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final RecyclerViewAdapter.ViewHolder holder, final int position) {
...
}
class ViewHolder extends RecyclerView.ViewHolder{
...
ViewHolder(View itemView) {
super(itemView);
...
}
}
}
private void initRecyclerView(){
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.invalidate();
adapter = new RecyclerViewAdapter();
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}