繁体   English   中英

如何在不重新加载屏幕的情况下更改回收站视图中的单个项目?

[英]How to change single item in recycler view without screen reload?

我有很多项目的回收站视图。我想要做的是更改 TextView 中被点击的项目内的文本。 我是这样做的:

        wordList.set(position, newWord);
        MyProgressActivityAdapter newAdapter = new MyProgressActivityAdapter(wordList, this);
        newAdapter.notifyItemChanged(position);
        recyclerView.setAdapter(newAdapter);

除了每次单击项目时屏幕都会转到顶部之外,一切正常。 我能做些什么来避免这种情况?

您应该使用notifyItemChanged的有效负载版本,这是一个简单的示例供您掌握它:

adapter.notifyItemChanged(position, "updateText");

然后在您的RecyclerAdapter中覆盖onBindViewHolder的有效负载版本:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
    if (payloads.isEmpty()) onBindViewHolder(holder, position);
    else if ("updateText".equals(payloads.get(0))) {
        if (holder instanceof YourViewHolder) {
            ((YourViewHolder) holder).textView.setText(dataProvider.get(position).getNewText());
        }
    }
}

请注意,这种方法会阻止RecyclerView创建新的ViewHolder然后绑定您的数据,因此您应该只调用notifyItemChanged而无需重置适配器等。

如果您正确处理, notifyItemChanged(position)应该可以工作。 尝试在onBindViewHolder内部处理这个问题,如下所示:

override fun onBindViewHolder(holder: RecyclerHolder, position: Int) {
    holder.itemView.text_view.text = items[position]

    holder.itemView.button.setOnClickListener {
        items[position] = "New Text"
        notifyItemChanged(position)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM