Почему мой 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.

OnItemSelectedListener прослушивает выбор элементов списка, а не клики элементов списка.

Выбор в этом случае можно рассматривать как перемещение фокуса этого элемента с помощью трекпада устройства.

Чтобы получить желаемое поведение, необходимо использовать OnItemClickListener .

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

Сначала вы должны установить ChoiceMode , а затем в ListView не будет принимать выбранное событие, потому что setOnItemSelectedListener зарегистрирован в AdapterView и обратный вызов в методе handleDataChanged() , но класс AbsListView переопределяет этот метод и никогда не OnItemSelectedListener обратный вызов 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()); } }); 
Intereting Posts
Как сделать значок приложения на Android? Пытается запустить Enhance на Android Studio Использование аннотации потока не проверяется как ожидалось Данные ViewPager потеряны при возврате с следующего экрана Android: SlidingDrawer исчезает под SurfaceView Не удается разрешить символ @ drawable / ic_launcher Ресурсы, чтобы изучить развивающие игры с ndk + opengl в C ++? Сложность с помощью ScrollView и LinearLayout Android: BaseAdapter и getLayoutInflater в отдельном файле класса Как реализовать Elevation Material-Design для Pre-lollipop Могу ли я использовать мягкую клавиатуру без EditText? Как использовать общие снимки моментальных снимков элемента во время перехода на активность? Как установить размер текста текстового вида динамически для разных экранов Как закрыть активность с помощью клавиатуры программного обеспечения после нажатия BACK? Как сохранить зарегистрированное пользовательское состояние в facebook sdk 4.4.0 android