у меня есть список с изображениями в каждой строке. В некоторых строках я хочу отобразить эти изображения, а в некоторых я не хочу отображать их, поэтому я использую собственный 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, поэтому у меня есть 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.