Android RecyclerView getChildAt()和getChildAdapterPosition()

时间:2018-11-20 04:35:08

标签: android android-recyclerview

我看到了一个示例代码,无法理解以下方法的含义:

public int getAdapterPositionForIndex(RecyclerView parent, int index) {
        final View child = parent.getChildAt(index);
        return parent.getChildAdapterPosition(child);
    }

我的理解是,返回的内容应始终等于索引,但是我的调试器显然没有这么说。由于文档不能很好地解释getChildAt()和getChildAdapterPostion()之间的区别,我希望我可以在这里获得一些专家见解。

2 个答案:

答案 0 :(得分:1)

根据我的理解,getChildAt()ViewGroup的一种方法。并且确实返回组中指定位置的视图。

由于RecyclerViewAdapterView,即物品在超出边界时得到回收,因此对#getChildAt()返回null。

我不确定确切的原因是什么,应该对此进行解释

另一方面,#getChildAdapterPosition()返回给定子视图添加到的适配器位置。 看下面的代码:(仅添加基本内容)

findViewById(R.id.b1).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LinearLayoutManager layoutManager= (LinearLayoutManager) rvNumber.getLayoutManager();
            final View child = layoutManager.findViewByPosition(30);
            if(child!=null) {
                int i = rvNumber.getChildAdapterPosition(child);
                Log.i("pos", i + "");
            }else{
                Log.i("pos",  "View is null");
            }
        }
    });

这里没什么复杂的!我仅在RecyclerView的{​​{1}}中放置了60个项目。列表中一次显示10个项目。因此,将首次设置10个视图(0-9)。

当我在单击按钮时调用上面的代码时,它为我提供了TextView视图。原因位置30的视图尚未膨胀。但是,滚动到位置30后,它将返回视图,并因此返回null的位置,该位置也将为30。

我认为您应该制作一个示例并尝试一下以更好地理解。

答案 1 :(得分:0)

从DOCS

getChildAdapterPosition()

  • 返回给定子视图对应的适配器位置。

getChildAt()

  • 返回组中指定位置的视图。
  

差异

这意味着getChildAdapterPosition()方法将返回Viewrecyclerview适配器内的位置

AND

getChildAt()方法从特定位置的View返回viewGroup

简而言之 两种方法都不同,getChildAt()view重新调整viewGroup,而其他getChildAdapterPosition()recyclerview适配器中重新调整视图的位置