Почему мой onItemSelectedListener не вызывается в ListView?
Я использую ListView, который настроен следующим образом:
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:longClickable="false"
android:choiceMode="singleChoice">
</ListView>
В моем коде я добавляю OnItemSelectedListener в ListView следующим образом:
getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);
моя активность реализует слушателя следующим образом:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
+ view.toString() + " Position: " + " Id: " + id);
}
Моя надежда состояла в том, что я увижу этот отладочный вывод в тот момент, когда я нажму на что-то в списке. Но вывод отладки никогда не отображается в LogCat.
Ответы
Ответ 1
OnItemSelectedListener
прослушивает выбор элементов списка, а не клики элементов списка.
Выбор в этом случае можно рассматривать как перемещение фокуса этого элемента с помощью трекпада устройства.
Чтобы получить желаемое поведение, необходимо использовать OnItemClickListener
.
Ответ 2
Это потому, что вы испытываете пальцы на сенсорном устройстве. В режиме touch mode нет фокуса и выбора. Пользовательские интерфейсы, требующие выбора, должны использовать другой вид виджетов, например, радиокнопок.
Ответ 3
Сначала вы должны установить ChoiceMode
, а затем в ListView не будет принимать выбранное событие, потому что setOnItemSelectedListener
зарегистрировано в AdapterView
и обратный вызов в методе handleDataChanged()
, но класс AbsListView
отменяет этот метод и никогда не вызывает обратный вызов OnItemSelectedListener
![введите описание изображения здесь]()
вы можете получить seletedItem этим методом в setOnItemClickListener
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("TAG", "onItemClick: " + position);
SparseBooleanArray positions = mListView.getCheckedItemPositions();
Log.e("TAG", "onItemSelected: " + positions.toString());
}
});