Почему мой 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.
3 ответа:
The
OnItemSelectedListener
прослушивает выбор элементов списка, а не щелчки по элементам списка.выбор в этом случае можно рассматривать как перемещение фокуса на этом элементе с помощью трекпада устройства.
чтобы получить желаемое поведение, нужно использовать
OnItemClickListener
.
Это потому, что вы будете испытывать с пальцами на сенсорном устройстве. В выбран режим, нет фокуса и нет выбора. UIs, которые нуждаются в выборе, должны использовать другой тип виджета, например переключатели.
во-первых,вы должны установить
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()); } });