我正在尝试更新 RecyclerView
项目点击的所有 View 。我尝试 findViewHolderForAdapterPosition()
来获取 ViewHolder
但它对于不可见项目返回 null
。据我所知,如果 View 尚未准备好,该方法可能会返回 null,并且如果列表很大,则更新其他不可见列表并不是一个明智的主意。但是,我的列表非常小(始终少于 10 个),我希望在单击项目时访问 View / View 持有者。
我使用以下代码来更新 ViewHolders
for (int i = 0; i < itemsList.size(); i++) {
if (i != getAdapterPosition()) {
MyViewHolder temp = (MyViewHolder) recyclerView.findViewHolderForAdapterPosition(i);
if (temp != null) {
//update elements
} else {
Log.i(TAG, "temp is null");
}
}
}
任何帮助或线索将不胜感激。
最佳答案
I want to get access to views/viewholders upon an item click.
您可以通过在适配器的 onBindViewHolder() 方法内的任何 View 上设置 onClickListener 来简单地实现此功能。
用于将项目上的单击事件分派(dispatch)到 Activity 或 fragment 进行处理:
1- 在您的适配器类中,定义一个名为 OnItemClickListener 的接口(interface):
public interface OnItemClickListener {
void onItemClicked(int position, AnyOtherDataYouWant data)
}
2-让您的 Activity 或 fragment 实现此接口(interface)
public MyActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener
3- 将 OnItemClickListener
接口(interface)类型的引用传递给适配器的构造函数
,并将其保存在名为 listListener
的字段中。
4- 在适配器的 onBindViewHolder
中,在您想要的 View (例如按钮或 TextView )上:
holder.myview.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
listListener.onItemClicked(position, AnyDataYouWant data) ;
}
}) ;
关于java - RecyclerView - findViewHolderForAdapterPosition() 对于不可见项目返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162585/