Привет всем,
У меня есть этот "результаты поиска" ListView.Результаты поиска могут быть разных «видов» (разные разделы, называйте это).Чтобы отделить «виды», я добавляю строку с заголовком.(Я знаю о расширяемом списке, но не могу использовать его по другим причинам).
В моем getView () я проверяю свойство, и если он установлен, я изменяю цвет фона строки.
Проблема: когда я запускаю запрос, который возвращает всего несколько строк (скажем, 15), все в порядке.Но когда я запускаю другой, который возвращает, скажем, 600 строк, что-то выходит из-под контроля и случайным образом меняет фон с некоторой регулярностью.То же самое происходит, когда я работаю в режиме отладки и останавливаюсь в середине.
Итак, это определенно проблема с синхронизацией.
Я думаю, это может быть связано с необходимостью повторного рендеринга большого списка при закрытии экранной клавиатуры.
Итак, виноват ли адаптер?Есть ли какое-нибудь решение для этого?
Если проблема в клавиатуре, есть ли механизм, чтобы сообщить списку «подождите, пока вещь не закроется» перед началом рендеринга?(Не уверен, что мне это нравится, но это лучше, чем получать милую маленькую радугу ...)
Спасибо!
Llappall
-
Вотадаптер и расположение элементов (ниже):
private class ElementAdapter extends ArrayAdapter<Element> {
private ArrayList<Element> rows;
private Element.typeEnum type;
public ElementAdapter(Context context, int textViewResourceId, ArrayList<Element> rows) {
super(context, textViewResourceId, rows);
this.rows = rows;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.element, null);
}
Element row = rows.get(position);
if (row == null) {
return v;
}
v.setTag(row);
type = row.getType();
boolean isSectionType = type == Element.typeEnum.DIV118SECTION || type == Element.typeEnum.APPASECT ||
type == Element.typeEnum.APPBSECT || type == Element.typeEnum.AZSECT;
TextView title = (TextView) v.findViewById(R.id.title);
TextView body = (TextView) v.findViewById(R.id.body);
if (isSectionType) {
body.setMaxLines(5000);
}
title.setText(row.getTitle());
if (row.getBody() != null) {
body.setText(row.getBody());
}
if (type == Element.typeEnum.SEARCHLISTHEADER) {
v.setBackgroundColor(Color.rgb(230, 230, 250));
title.setBackgroundColor(Color.rgb(230, 230, 250));
body.setBackgroundColor(Color.rgb(230, 230, 250));
star.setBackgroundColor(Color.rgb(230, 230, 250));
}
return v;
}
}
== ПЛАН ЭЛЕМЕНТОВ ==
<TextView
android:id="@+id/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
style="@style/ListItemSubTitle" />
</LinearLayout>