我看到了一个示例代码,无法理解以下方法的含义:
public int getAdapterPositionForIndex(RecyclerView parent, int index) {
final View child = parent.getChildAt(index);
return parent.getChildAdapterPosition(child);
}
我的理解是,返回的内容应始终等于索引,但是我的调试器显然没有这么说。由于文档不能很好地解释getChildAt()和getChildAdapterPostion()之间的区别,我希望我可以在这里获得一些专家见解。
答案 0 :(得分:1)
根据我的理解,getChildAt()
是ViewGroup
的一种方法。并且确实返回组中指定位置的视图。
由于RecyclerView
是AdapterView
,即物品在超出边界时得到回收,因此对#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()
方法将返回View
在recyclerview
适配器内的位置
AND
getChildAt()
方法从特定位置的View
返回viewGroup
简而言之
两种方法都不同,getChildAt()
从view
重新调整viewGroup
,而其他getChildAdapterPosition()
在recyclerview
适配器中重新调整视图的位置