java - getView如何确定回收的convertView在List中的位置

标签 java android listview android-recyclerview

我一直在阅读有关回收列表项的文章和问题,而不是膨胀一个成本高昂的新列表项。我特别读到this question我理解答案,但我的问题是:当我们向下滚动列表时,顶部的一些列表项消失,它们应该被回收并再次显示在列表的底部。

android如何确定它们的位置? 当我们使用viewHolder = (ViewHolder)convertView.getTag;时viewHolder 显然持有想要回收的行,当我们使用 viewHolder.txtName.setText(dataModel.getName()); 设置 View 元素时我知道我们更新了特定 viewHolder 中的元素,那么它如何到达列表的底部?

我发现这篇文章非常有用,但没有足够的解释和评论来让我清楚地了解回收。 Android ListView with Custom Adapter

最佳答案

How does android determine the position of them?

ListView 适配器(例如 ArrayAdapter)有 ArrayAdapter.getView() RecyclerViews 的等效适配器是 RecyclerView.Adapter.onBindViewHolder() 。他们都有一个position 方法签名中的参数:

// ListView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ...
}

// RecyclerView
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    ...
}

这是列表行position已滚动到 View 中,需要绑定(bind)以填充数据。

此外,RecyclerView.ViewHolder对象具有方法 getAdapterPosition() ,这样就可以在 onCreateViewHolder() 之外找到 ViewHolder 的列表行位置和onBindViewHolder()方法,例如在单击事件处理程序中。

另请参阅:

关于java - getView如何确定回收的convertView在List中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45330203/

相关文章:

android - 应用程序注册以访问 Uber api

android - MVVM RXAndroid 无法在后台线程上调用 setValue

android - 列表显示。单击 imageView 时获取 itemId

android - 如何以编程方式在 Android 中将 ListView 滚动到上下手势

android - 在两行ListView中列出联系信息

java - 用java发送电子邮件

java - 使用 ShrinkWrap 找不到 test-persistence.xml

java - 数组和方法?

java - 枚举中的重载等于方法 - 有什么陷阱吗?

android - 在 db.query() 中使用 Sqlite group_concat 而不是 rawquery