我一直在阅读有关回收列表项的文章和问题,而不是膨胀一个成本高昂的新列表项。我特别读到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/