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