Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

Ответ 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());

        }
    });