android - Android RecyclerView getChildAt() 和 getChildAdapterPosition()
问题描述
看了一个示例代码,无法理解以下方法的含义:
public int getAdapterPositionForIndex(RecyclerView parent, int index) {
final View child = parent.getChildAt(index);
return parent.getChildAdapterPosition(child);
}
我的理解是返回的应该总是等于索引,但我的调试器显然没有这么说。由于文档没有很好地解释 getChildAt() 和 getChildAdapterPostion() 之间的区别,我希望我能在这里得到一些专家的见解。
解决方案
好吧,据我了解getChildAt()
是一种方法ViewGroup
。它确实返回组中指定位置的视图。
由于RecyclerView
是一个AdapterView
ie 项目在超出边界时得到回收,因此它返回 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 。
我认为您应该制作一个样本并使用它来更好地理解。
推荐阅读
- google-apps-script - 如何授予对第三方应用程序的访问权限
- swift - 无法快速更改侧边菜单语言?
- bash - 如何在 Bash Shell 中获得一周中给定年份的第一天?
- python - 缩短 Sphinx 中 Python 类型注释的显示格式
- sql - 始终加密:如何插入加密列?
- django - django-storage:如何使用 sftp 将媒体文件存储到 aws 实例中的文件夹
- javascript - 重新加载页面时如何制作图像比例
- list - Filer 值超出复选框
- python - 抗毒性过滤器 Discord.py
- gcc - 是在 Centos 7.4 上构建 gcc 11.1.0 所需的当前 binutils