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

问题描述 投票:0回答:2

我有很多物品的Recycler View。我要做的是更改被单击的物品内TextView中的文本。我以这种方式做到了:

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

并且一切正常,除了每次单击项目时屏幕都转到顶部。我该怎么做才能避免这种情况?

java android
2个回答
1
投票

您应该使用有效载荷版本的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而不重置适配器,等等。

0
投票

notifyItemChanged(position)应该可以正确处理。尝试在onBindViewHolder内部处理此问题,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.