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

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

试图找出更新的问题所在RecyclerView是适配器。

在我得到一份新的产品清单之后,我试着:

  1. 更新ArrayList从碎片recyclerView,将新数据设置为适配器,然后调用adapter.notifyDataSetChanged()没有用。

  2. 像其他人一样,创建一个新适配器,它对他们起了作用,但对我来说没有变化:recyclerView.setAdapter(new RecyclerViewAdapter(newArrayList))

  3. 创建一个方法Adapter它更新数据如下:

    public void updateData(ArrayList<ViewModel> viewModels) {
       items.clear();
       items.addAll(viewModels);
       notifyDataSetChanged();}

    然后,每当我想更新数据列表时,我都会调用这个方法;它没有工作。

  4. 若要检查是否可以任何方式修改“回收视图”,并且尝试删除至少一个项目:

     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);
    }
因此,如何实际更新适配器数据以显示新接收的项?



海绵宝宝撒
浏览 437回答 3
3回答

翻翻过去那场雪

我使用的是回收视图,删除和更新都很好。1)删除:从回收视图中删除项目有4个步骤list.remove(position);recycler.removeViewAt(position);mAdapter.notifyItemRemoved(position);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mAdapter.notifyItemRangeChanged(position,&nbsp;list.size());这些密码对我有用。2)更新数据:我唯一需要做的就是mAdapter.notifyDataSetChanged();所有这些都必须在actvity/片段代码中完成,而不是在ReccyclerView Adapter代码中。

ABOUTYOU

这就是对我有用的东西:recyclerView.setAdapter(new&nbsp;RecyclerViewAdapter(newList));recyclerView.invalidate();在创建了一个包含更新列表的新适配器(在我的例子中,它是一个转换为ArrayList的数据库)并将其设置为适配器之后,我尝试了recyclerView.invalidate()而且成功了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android