首页 > 解决方案 > Android RecyclerView getChildAt() 和 getChildAdapterPosition()

问题描述

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

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

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

标签: androidandroid-recyclerview

解决方案


好吧,据我了解getChildAt()是一种方法ViewGroup。它确实返回组中指定位置的视图。

由于RecyclerView是一个AdapterViewie 项目在超出边界时得到回收,因此它返回 null #getChildAt()

我不确定确切的原因可能是一些应该解释的

另一方面#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一个TextView. 其中 list 一次显示 10 个项目。所以第一次将放置 10 个视图 (0-9)。

当我点击按钮调用上面的代码时,它给了我一个null视图。原因 Views 还没有为位置 30 膨胀。但是在滚动到位置 30 之后,它返回视图,因此它的位置 getChildAdapterPosition()也将是 30 。

我认为您应该制作一个样本并使用它来更好地理解。


推荐阅读