gpt4 book ai didi

android - 是否允许使 RecyclerView 中的项目的 onClick 监听器作用于在 onBindViewHolder 期间实例化的局部变量?

转载 作者:行者123 更新时间:2023-11-30 01:07:16 25 4
gpt4 key购买 nike

我不确定这是否被允许,否则有时会使用非预期的项目。

假设我有一个固定数据:

final String[] items = {"a", "b", "c"};

我的 RecyclerView 适配器的项目数等于该数据大小:

@Override
public int getItemCount() {
return items.size();
}

然后我绑定(bind)数据并设置一个 onClickListener:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
final String item = items[position];
holder.textView.setText(item);
holder.itemView.setOnClickListener(v -> Log.d(TAG, "Item " + item + " was clicked!"); // 1
}

我的问题是标记为//1 的行是否正确。还是我必须改为执行此操作?

holder.itemView.setOnClickListener(v -> Log.d(TAG, "Item " + items[holder.getAdapterPosition()] + " was clicked!"); 

最佳答案

来自official onBindViewHolder docs :

Note that unlike ListView, RecyclerView will not call this method again if the position of the item changes in the data set unless the item itself is invalidated or the new position cannot be determined. For this reason, you should only use the position parameter while acquiring the related data item inside this method and should not keep a copy of it. If you need the position of an item later on (e.g. in a click listener), use getAdapterPosition() which will have the updated adapter position.

根据此描述,在 OnClickListener 中,最好使用 getAdapterPosition(),因为项目的位置可能会在运行时发生变化。无论如何,当您“稍后”需要值时(例如在 OnClickListener 中),他们建议使用 getAdapterPosition(),所以这可能是可行的方法。

关于android - 是否允许使 RecyclerView 中的项目的 onClick 监听器作用于在 onBindViewHolder 期间实例化的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38760661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com