[英]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.