android虚拟设备-视图有奇怪的背景颜色
我正在使用当前的Android SDK r15 在我的项目中,我使用基于BaseAdapter的自定义适配器的ListView。在BaseAdapter::getView方法中,有一个视图,它从xml资源中膨胀,并用文本进行定制和填充;此外,背景颜色也会根据多种情况而改变。这非常有效,但是: 在Android 3.0及更高版本的Android虚拟设备(AVD)上,我遇到了一个问题,在某个时候,当Android尝试回收现有视图时,背景颜色不会改变,即使在xml资源中指定了背景颜色 我应该假设这是android emulator的问题,还是在真实设备上也会发生这种情况? 我从来没有在真正的设备上看到过这个问题,使用相同的应用程序 非抽象示例: 我有一个项目,它有一个登录布局(几乎为白色,带有输入字段和按钮),一个“tablet”布局,包含一个联系人列表视图和一个对话列表视图;登录后,我可以选择联系人。在线联系人背景为绿色,离线联系人背景为白色。选择联系人后,联系人的背景变为红色。对话被加载到对话列表视图中。现在我注销了,现在可能是我以前的白色登录是绿色或红色的,就像以前的联系人列表视图一样。此外,甚至我的对话列表视图条目也可能继承联系人列表视图元素的颜色,而忽略xml中指定的背景颜色。这似乎很随意 getView的缩写代码: (刚刚排除了设置“profileImage”的代码) 请尝试以下代码段:android虚拟设备-视图有奇怪的背景颜色,android,avd,Android,Avd,我正在使用当前的Android SDK r15 在我的项目中,我使用基于BaseAdapter的自定义适配器的ListView。在BaseAdapter::getView方法中,有一个视图,它从xml资源中膨胀,并用文本进行定制和填充;此外,背景颜色也会根据多种情况而改变。这非常有效,但是: 在Android 3.0及更高版本的Android虚拟设备(AVD)上,我遇到了一个问题,在某个时候,当Android尝试回收现有视图时,背景颜色不会改变,即使在xml资源中指定了背景颜色 我应该假设这是a
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null) {
view = inflater.inflate(R.layout.contacts_listelement, parent, false);
}
else {
view = convertView;
}
即使这不能解决您的问题,这对您的
列表视图
来说也是一个巨大的性能提升。当Android试图重用视图时,convertView
第一次是null
,然后它包含了旧创建的视图,这些视图被重新循环并应该被使用。你能把getView
函数的代码放进去吗?我已经编辑了这个问题,现在包括了getView
的代码。谢谢你的改进:)没有。背景颜色已损坏的视图将通过setContentView(R.layout.[…])加载到不同的位置;我已经用以下解决方案解决了这个问题:现在我使用不同的预着色布局,这意味着,我不会手动更改背景颜色。这解决了问题。我现在很困惑。所以损坏的视图不仅在getView
中,而且在其他地方也存在?您希望getView
中视图的更改也会反映在该位置?在联系人列表视图中,一切正常。但是在对话列表视图和其他视图中,android:background属性在android回收视图时被view.setBackgroundColor-method覆盖。就这些。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null) {
view = inflater.inflate(R.layout.contacts_listelement, parent, false);
}
else {
view = convertView;
}