为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新回收视图适配器数据?

如何更新回收视图适配器数据?

海绵宝宝撒 2019-07-05 10:18:51
如何更新回收视图适配器数据?试图找出更新的问题所在RecyclerView是适配器。在我得到一份新的产品清单之后,我试着:更新ArrayList从碎片recyclerView,将新数据设置为适配器,然后调用adapter.notifyDataSetChanged()没有用。像其他人一样,创建一个新适配器,它对他们起了作用,但对我来说没有变化:recyclerView.setAdapter(new RecyclerViewAdapter(newArrayList))创建一个方法Adapter它更新数据如下:public void updateData(ArrayList<ViewModel> viewModels) {    items.clear();    items.addAll(viewModels);    notifyDataSetChanged();}然后,每当我想更新数据列表时,我都会调用这个方法;它没有工作。若要检查是否可以任何方式修改“回收视图”,并且尝试删除至少一个项目: public void removeItem(int position) {     items.remove(position);     notifyItemRemoved(position);}一切都保持原样。这是我的适配器:public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements View.OnClickListener {     private ArrayList<ViewModel> items;     private OnItemClickListener onItemClickListener;     public RecyclerViewAdapter(ArrayList<ViewModel> items) {         this.items = items;     }     public void setOnItemClickListener(OnItemClickListener onItemClickListener) {         this.onItemClickListener = onItemClickListener;     }     @Override     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {         View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler, parent, false);         v.setOnClickListener(this);         return new ViewHolder(v);     }     public void updateData(ArrayList<ViewModel> viewModels) {         items.clear();         items.addAll(viewModels);         notifyDataSetChanged();     }     public void addItem(int position, ViewModel viewModel) {         items.add(position, viewModel);         notifyItemInserted(position);     }     public void removeItem(int position) {         items.remove(position);         notifyItemRemoved(position);     }因此,如何实际更新适配器数据以显示新接收的项?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

我使用的是回收视图,删除和更新都很好。

1)删除:从回收视图中删除项目有4个步骤

list.remove(position);recycler.removeViewAt(position);mAdapter.notifyItemRemoved(position);                 
mAdapter.notifyItemRangeChanged(position, list.size());

这些密码对我有用。

2)更新数据:我唯一需要做的就是

mAdapter.notifyDataSetChanged();

所有这些都必须在actvity/片段代码中完成,而不是在ReccyclerView Adapter代码中。


查看完整回答
反对 回复 2019-07-05
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这就是对我有用的东西:

recyclerView.setAdapter(new RecyclerViewAdapter(newList));recyclerView.invalidate();

在创建了一个包含更新列表的新适配器(在我的例子中,它是一个转换为ArrayList的数据库)并将其设置为适配器之后,我尝试了recyclerView.invalidate()而且成功了。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 436 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信