当前位置: 首页 > 知识库问答 >
问题:

Android - holder从recyclerView适配器项目位置返回null

东门深
2023-03-14

我想从我的回收器视图中的给定项目位置获取视图,但持有者总是为空,我不知道为什么。

                        Rect toRect = new Rect();
                        selectedPostTagsAdapter.addPostTag(postTag);
                        selectedPostTagsAdapter.notifyDataSetChanged();
                        for (int i = 0; i < selectedPostTagsAdapter.getItemCount(); i++) {
                            RecyclerView.ViewHolder holder = rvSelectedPostTags.findViewHolderForItemId(selectedPostTagsAdapter.getItemId(i));
                            if (holder != null) {
                                View viewX = holder.itemView;
                                viewX.getGlobalVisibleRect(toRect);
                            }

共有1个答案

邵赞
2023-03-14

RecyclerView.findViewHolderForItemId() 可能返回 null 有两个原因。

首先,如果您的RecyclView没有稳定的id,它将始终返回null。您可以调用rvSelectedPostTags.setHasStableIds(true)来打开此功能。但是,请注意,如果您想使用它,您实际上必须具有逻辑稳定的id。这意味着给定的数据项应该始终返回相同的id,而不管它的位置如何。

其次,如果您传递当前未在 RecyclerView 中布局的项目的 ID,它将返回 null。因此,如果您当前可以看到项目 #5-#12,但您想要 #200 的 ViewHolder,则它将无法正常工作。

 类似资料:
  • 在旧代码中,当我使用与自定义适配器时,我可以使用此代码获取项目。 现在我正在实现。如何从<代码>回收视图中获取项目。适配器?

  • 本文向大家介绍Android实现的RecyclerView适配器,包括了Android实现的RecyclerView适配器的使用技巧和注意事项,需要的朋友参考一下 这个适配器我珍藏已久(近两年), 不断看到别人发适配器相关的文章, 但我总觉得没我的好用, 所以今日拿出来分享(宣传)一下, 欢迎各位指正不足. 源码地址: GitHub 功能 无需继承 Adapter, 无需判断 item 类型. 支

  • 我有麻烦了!我有这个RecyclerView,其中我使用GridLayoutManager来实现两列和几行。但我的问题来了:我在这个RecyclerView中最多有8个项目,我想根据屏幕大小来调整它们 到目前为止,我得到了这个: 使用这段代码: 和在我的 上的选项项适配器构造函数中: 你有什么想法可以让我做到这一点吗?提前致谢。

  • 问题内容: 所以我有一个自定义的listview。就像Instagram布局一样,每个列表项中都有1张图片和一堆按钮。所以这是问题所在: 我要实现共享按钮。为此,我尝试创建一个从适配器到活动的回调。但这似乎没有用。这是我到目前为止的内容(我裁剪了不相关的部分): 主要活动 列表适配器 错误日志: 问题答案: 您需要告诉适配器使用哪个OnShareClickedListener()实现。现在,在您的

  • 我为后台服务实现了一个AsyncTask来执行对数据库的查询,该查询速度非常快,不超过2-3秒。AsyncTask中的ProgressDialog有时很难检测到。 我的问题是,当任务完成并且我检索到游标时,当我将适配器设置到RecyclerView时,流程会冻结我的UI几秒钟,直到数据设置完毕。当我执行搜索(新查询,与获取所有行相同的过程,但行数较少),并替换光标以更新数据时,也会发生这种情况。

  • 在中,我需要更改每个行列表中的,即在选择每个位置后才指定的行更改。 所有的事情都是正确的,但当滚动回收视图,所选行的位置会自动改变! 这是我的适配器类: 我在输出中看到的: 正如所看到的,我选择了第一行图标,但滚动RecyclerView后,选择的位置改变了。 然后尝试使用更改和在中的位置再次错误! 我也看到了这个解决方案:获取点击的项目及其在RecyclerView中的位置