簡體   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