gpt4 book ai didi

Android:getView() 不返回正确的 View 对象

转载 作者:行者123 更新时间:2023-11-29 18:14:45 24 4
gpt4 key购买 nike

我已经编写了从 ArrayAdapter 扩展而来的自定义 ContactListAdapter。假设该列表只有三个元素。我正在打印每次调用 getView() 时收到的 View 对象的位置和哈希码。我观察到 View 对象未正确返回。我在这里做错了什么吗?

private class ContactListAdapter extends ArrayAdapter<ContactItem> {
... ...
@Override
public View getView(int aPosition, View aConvertView, ViewGroup aParent) {
Log.d(TAG, "Inside ContactListAdapter.getView()");
if(aConvertView==null) {
Log.d(TAG, "ConvertView is null");
// Inflate view...
}
Log.d(TAG, "Pos: " + aPosition + " View: " + aConvertView.hashCode());
return aConvertView;
}

这是初始 View 创建的日志:

D/ContactsActivity(  759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): ConvertView is null
D/ContactsActivity( 759): Pos: 0 View: 1156974184
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): ConvertView is null
D/ContactsActivity( 759): Pos: 1 View: 1157007416
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): ConvertView is null
D/ContactsActivity( 759): Pos: 2 View: 1157027832

当我点击列表中的第三个元素时记录(注意第一个和最后一个元素的哈希码是如何交换的)。我的 onClick 方法只启用相应列表条目中的几个实体:

D/ContactsActivity(  759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 0 View: 1157027832
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 1 View: 1157007416
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 2 View: 1156974184

当我点击第二个元素时记录:

D/ContactsActivity(  759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 0 View: 1156974184
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 1 View: 1157007416
D/ContactsActivity( 759): Inside ContactListAdapter.getView()
D/ContactsActivity( 759): Pos: 2 View: 1157027832

这是反复观察的,每次只交换第一个和最后一个条目的哈希码。可能是什么原因造成的?

最佳答案

convertView 用于重用适配器 View 的 View ,因此当您显示列表并假设您的屏幕一次可以显示 5 行时,那么为了在 5 行中创建 View ,convertView 将保持为 null,但是当您向下滚动时,您的适配器为您的适配器 View 创建新 View ,因此,列表中的第六个元素在位置 1 重用 View 。

关于Android:getView() 不返回正确的 View 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com