我的每一行都有一个包含图像视图的列表。在某些行中,我想显示那些图像,在某些行中我不想透视它们,所以我使用自定义ListAdapter:
List Row 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。默认情况下,ImageView是不可见的,并根据上面显示的条件显示。 TextVoews是黑色的,并根据另一个条件获得另一种文本颜色。
我的问题是这适用于1-5个项目左右的小型列表,但是当列表变长时,这不能按预期工作。结果有时是错误的,当我基于相同的数据重新加载列表视图时,我可能每次都看到不同的结果。图像设置错误或文本颜色设置错误。
第二个问题是,当我对适配器应用过滤器时,这完全肯定是wron。我有一个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的那一刻起,整个列表视图完全改变,现在基于条件的格式化似乎不仅“有时是错误的”,而且现在“完全没有任何逻辑”。
这是我创建行和使用适配器的正确方法吗?为什么这不能正常工作?当我开始使用过滤器时,为什么它会变得非常疯狂?
非常感谢你的帮助。
答案 0 :(得分:1)
适配器视图会被回收,因此您必须考虑所有路径,例如:
if(condition == true){
((ImageView) view.findViewById(R.id.image1)).setVisibility(View.VISIBLE);
} else {
((ImageView) view.findViewById(R.id.image1)).setVisibility(View.INVISIBLE);
}
这样,当条件为假时,ImageView
将被隐藏。
对于您的过滤器问题一无所知,我的预感是它与上述相同的问题有关。
答案 1 :(得分:0)
对于第一个问题:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = mInflater.inflate(R.layout.my_list_row, null);
if(condition == true)
((ImageView) convertView.findViewById(R.id.image1)).setVisibility(View.VISIBLE);
else
((ImageView) convertView.findViewById(R.id.image1)).setVisibility(View.INVISIBLE);
}
return convertView;
}
关于过滤器,你想做什么?您可能想要查看inputTypes:
http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
答案 2 :(得分:0)
所以我最后改变了SimpleAdapter,我不得不使用ArrayAdapter并且没有使用默认的Filter方法,而是实现了一个过滤ArrayList并将过滤后的ArrayList设置为Adapters List的方法。现在它有效。使用SimpleAdapter,图像在过滤后没有更新,并且使用过滤后的列表,我无法更新视图。立即行动。