#android #listview #selection
#Android #просмотр списка #выбор
Вопрос:
У меня есть ListView (установлен в CHOICE_MODE_SINGLE) У меня есть SimpleCursorAdapter, который заполняет мой ListView. Сейчас я работаю над отбором.
serviceListView.setAdapter(
new SimpleCursorAdapter(this, R.layout.service_listitem, cursor, new String[] { "name" }, new int[] { R.id.service_name }) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View renderer = super.getView(position, convertView, parent);
if (position == newSelectedPosition) {
renderer.setBackgroundResource(R.layout.list_view_layer_list);
} else {
renderer.setBackgroundResource(android.R.color.transparent);
}
return renderer;
}
}
);
Поэтому я хочу, чтобы при выборе строки применялся мой макет. Это прекрасно работает.
Но в некоторых случаях, когда я нажимаю в течение 2-3 секунд на строку, а затем немного перетаскиваю и отпускаю строку, я получаю 2 выбранных строки.
Я пробую несколько способов избавиться от первоначального выбора, перезаписывая OnTouchListener, onScrollListener, OnLongClickListener. Никаких результатов.
Любая помощь приветствуется
Спасибо
Ответ №1:
Вы пытались вызвать notifyDataSetChanged()
свой адаптер после изменения выбора? Это должно привести к повторному восстановлению всех строк, и все представления (кроме выбранного) вернутся к прозрачному фону.
Комментарии:
1. Извините, я бы подумал, что это сработает. Я не вижу, как одна и та же позиция будет привязана дважды. Я не уверен, поможет ли вызов notifyDataSetChanged при снятии пальца с экрана. Возможно, попробуйте добавить несколько журналов в выбранную функцию, и функция привязки может помочь вам увидеть, что происходит.
Ответ №2:
Я вышел из этой реализации. Я попытаюсь «имитировать» ListView, используя ScrollView с TextView-s для каждой строки
Комментарии:
1. Это работает просто отлично. Для других пользователей, у которых такая же проблема, попробуйте заменить ListView на ScrollView, заполненный TextViews.