我确实在每一行都有一个包含图像视图的列表。在某些行中,我想显示这些图像,而在某些行中,我不想显示它们,因此我使用了自定义 ListAdapter:
列表行 XML 具有:
<ImageView
android:id="@+id/image1"
android:layout_height="fill_parent"
android:src="@drawable/button1"
android:visibility="invisible"/>
因此,您可以看到默认情况下所有图像都是不可见的。
然后在自定义 SimpleAdapter 中检查我的条件,并根据我将这一行的图像设置为可见:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if(condition == true){
((ImageView) view.findViewById(R.id.image1)).setVisibility(View.VISIBLE);
}
return view;
}
所以我正在这样做,每行有 2 个 ImageViews 和 3 个 TextViews。ImageViews 默认情况下是不可见的,并且根据如上所示的条件变得可见。TextVoews 是黑色的,并根据另一个条件获得另一种文本颜色。
我的问题是,这对于像 1-5 项左右这样的小列表很有效,但是当列表变长时,这不会按预期工作。结果有时只是错误的,当我根据相同的数据重新加载列表视图时,我可能每次都会看到不同的结果。图像设置错误或文本颜色设置错误。
第二个问题是,当我对适配器应用过滤器时,这完全而且肯定是错误的。我确实有一个 EditText 字段,我想在这个 EditText 的每次更改上应用过滤器,所以我在那个 EditText 上有一个 TextChangedListener:
edittext1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s);
}
});
从我将焦点设置到此 EditText 的那一刻起,整个列表视图就完全改变了,现在基于条件的格式似乎不仅“有时是错误的”,而且现在“完全没有任何逻辑”。
那么这是我创建行和使用适配器的正确方法吗?为什么这不能正常工作,为什么当我开始使用过滤器时它会变得完全疯狂?
非常感谢您的帮助。