Проблема с выбором Android в ListView

#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.