java - RecyclerView - findViewHolderForAdapterPosition() 对于不可见项目返回 null

标签 java android android-layout android-recyclerview

我正在尝试更新 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/

相关文章:

java - ZygoteInit$MethodAndArgsCaller.run() 按 ID 查找布局时出错

android - 如何使用 ADB 在开发人员选项中启用保持清醒?

java - 如何在卡片 View 的侧面设置颜色

java - tinyMCE 不仅替换了文本区域,还替换了整个表单

java - 无法在不同的 spring boot 应用程序中的不同端口上启动 2 个嵌入式 active-mq

java - 为什么这个枚举编译?

Java 套接字只接受 header

android - 循环使用 XML 动画文件?

android - Android M Doze 状态本身是否有多个状态?

android - 如何将约束布局包含到另一个约束布局并在每个约束布局之间设置约束