Почему мой onItemSelectedListener не вызывается в ListView? - PullRequest
54 голосов
/ 16 марта 2010

Я использую 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);

my Activity реализует слушателя так:

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

Ответы [ 3 ]

96 голосов
/ 16 марта 2010

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

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

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

2 голосов
/ 10 августа 2016

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

1 голос
/ 24 ноября 2016

Сначала вы должны установить ChoiceMode, а затем, в ListView, не будет принимать выбранное событие, потому что setOnItemSelectedListener зарегистрировано в AdapterView, и обратный вызов в методе handleDataChanged(), но класс AbsListView переопределить этот метод и никогда не выполнять обратный вызов OnItemSelectedListener

enter image description here

этим методом вы можете получить 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());

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