recyclerView中的ViewHolder注册可见视图位置而非绝对视图位置

时间:2016-09-16 12:45:57

标签: android android-recyclerview android-viewholder

预期行为:

您好我正在使用recyclerView来显示从List<>加载的图像网格。保存在ViewAdapter中。 当用户单击图像时,将创建一个新片段,并将其作为参数提供给List<>中的相应项目。我使用此代码执行此操作

private class ShowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//holder code...

        @Override
        public void onClick(View view) {
            int itemPosition = mRecyclerView.indexOfChild(view);

            Fragment newDetail = DetailFragment.newInstance(mShowAdapter.getList().get(itemPosition));
            //launch Fragment
        }
    }

这:mShowAdapter.getList().get(itemPosition)返回要从列表<>传递的项目。这适用于视图中的任何项目,但前提是我不要向下滚动。

错误:

当我向下滚动几页并单击某个项目时,将从列表中提取错误的项目。例如,让我说在滚动几页后点击第一个可见项目。从列表中检索的项目实际上是List<>中的第一项。而不是27日。

这是因为recyclerView正在注册相对于VISIBLE项目的点击位置。如果我点击第三个可见项目,就像我点击顶部的第三个绝对项目一样,这并不重要。

如何解决此问题以便检索正确的项目?

2 个答案:

答案 0 :(得分:1)

尝试

int itemPosition = getAdapterPosition ();

答案 1 :(得分:0)

尝试在onBindViewHolder()中设置onclick监听器。

相关问题