Android ListView setSelection () не работает - PullRequest
65 голосов
/ 18 сентября 2009

У меня есть ListActivity, который реализует onListItemClick() и вызывает функцию doSomething() класса. Последний содержит l.setSelection(position), где l - объект ListView.

Теперь onClickListener() слушает нажатие кнопки, которое выполняет некоторые действия и тоже вызывает doSomething().

В первом случае выбранный элемент позиционируется соответствующим образом, но во втором случае ничего не происходит.

Есть какие-нибудь подсказки об этом странном поведении и о том, как я могу заставить его работать?

Ответы [ 17 ]

0 голосов
/ 09 марта 2017

Просто попробуйте этот код

  listView.setAdapter(adapter);
  listView.setSelection(position);
  adapter.notifyDataSetChanged(); 
0 голосов
/ 11 апреля 2016

Для меня решение этой проблемы было:

listView.clearChoices();
0 голосов
/ 28 января 2016

Когда вы используете post to setSelection(), сначала увидите ListView, затем прокрутите к позиции, спасибо " 魏經軒 ", тогда макет фактически повлияет на setSelection(), потому что setSelection() позвоните setSelectionFromTop(int position, int y), есть еще один способ ее решить.

listView.setAdapter(listView.getAdapter());
listView.setSelection(123);
0 голосов
/ 25 февраля 2015

Я обнаружил, что иногда setSelection не работает, потому что я установил атрибут "android: height" listView равным "wrap_content".

И мое приложение не работает, когда listView становится прокручиваемым из не прокручиваемого.

Например, если мое приложение "Приложение для просмотра файлов". Когда мой список меньше, скажем, 6, он не прокручивается. Теперь я возвращаюсь в родительский каталог, в котором есть 11 объектов, и я хочу установить выделение на какую-то позицию, и он не будет работать здесь.

to\from    |    Scrollable  | non-Scrollable

Прокручиваемый | O | O (конечно)

без прокрутки | X | O (конечно)

Я не хочу использовать post (Runnable), потому что там будет задержка.

==================================

Ответ:

Вы можете попробовать установить для "android: height" значение "match_parent"

Боже, он проводит три дня.

0 голосов
/ 09 мая 2014

Нашел решение в моем случае. Я не использую Runnable, так как мой класс расширяет ListFragment. Что мне нужно было сделать, это сделать мой индекс окончательным; окончательный индекс = 5; mListView.setSelection (индекс);

0 голосов
/ 04 февраля 2014

Для меня это помогло установить
ListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); или ListView.CHOICE_MODE_MULTIPLE
то
ListView.setSelection(position) или ListView.setItemChecked(position, true);
отлично работает

0 голосов
/ 27 декабря 2012

В моем случае сработало smoothScrollToPosition (int position), вы также можете сказать мне, как установить эту прокручиваемую позицию в центр списка. На дне появились видимые предметы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...