у меня есть список с изображениями в каждой строке. В некоторых строках я хочу отображать эти изображения, а в некоторых я не хочу их отображать, поэтому я использую собственный 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 ImageView и 3 TextView в каждой строке. ImageView невидимы по умолчанию и становятся видимыми в зависимости от условия, как показано выше. TextVoews черные и получают другой цвет текста на основе другого условия.
Моя проблема в том, что это отлично работает для небольших списков, таких как 1-5 элементов или около того, но когда список становится длиннее, это не работает должным образом. Иногда результат просто неправильный, и когда я перезагружаю список на основе одних и тех же данных, я могу каждый раз видеть другой результат. Изображения установлены неправильно или цвета текста установлены неправильно.
Вторая проблема заключается в том, что это становится полностью и определенно неправильным, когда я применяю фильтр к адаптеру. У меня есть поле EditText, и я хочу применять фильтр при каждом изменении этого EditText, поэтому у меня есть TextChangedListener для этого EditText:
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, весь список полностью меняется, и кажется, что форматирование на основе условий теперь не только «иногда неправильно», но теперь «совершенно без какой-либо логики».
Так правильно ли я создаю свои строки и использую адаптер? Почему это не работает должным образом и почему это сходит с ума, когда я начинаю использовать фильтр?
Большое спасибо за вашу помощь в advane.