Android ListView: как выбрать элемент?

У меня возникают проблемы с созданным мной ListView: я хочу, чтобы элемент был выбран, когда я нажимаю на него.

Мой код для этого выглядит так:

protected void onResume() { ... ListView lv = getListView(); lv.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) { Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition()); } public void onNothingSelected(AdapterView<?> adapterView) { Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition()); } }); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) { lv.setSelection(pos); Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition()); } }); ... } 

Когда я запускаю это и нажимаю, например, на второй элемент (т.е. pos = 1), я получаю:

 04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1 

Т.е. даже если OnItemClickListener вызывается с правильным аргументом и вызывает setSelection (1), нет выбранного элемента (и, следовательно, OnItemSelectedListener.onItemSelected (…) никогда не вызывается), а getSelectedItemPosition () все еще дает -1 после setSelection (1) -Call.

Что мне не хватает?

Майкл

PS: В моем списке есть> = 2 элемента …

Отсутствующий элемент здесь – choiceMode . Это не очень хорошо документировано , но ListViews (и, в дополнение, все, что наследует от AbsListView, например GridView и т. Д.) В android по умолчанию не позволяют выбирать, но его можно включить – либо в XML, либо в коде:

В XML:

 <ListView ... android:choiceMode="singleChoice" /> 

Код:

 mListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); 

Обратите внимание, что как только вы это сделаете, андроид setSelection() для вас setSelection() , поэтому вам не нужно отслеживать это самостоятельно. В этот момент ваш onClickListener предназначен только для сохранения выбора, и я даже не беспокоюсь о OnSelectedItemListener:

 @Override public void onItemClick(final AdapterView<?> list, final View v, final int position, final long id) { Participant p = mAdapter.getParticipantForId(id); eventManager.fire(new ParticipantSelectedEvent(p)); pxList.smoothScrollToPosition(position); // Make sure selection is plainly visible } 

Попробуй это:–

  ListView lv = getListView(); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // selected item String product = ((TextView) view).getText().toString(); Toast.makeText(getApplicationContext(), "Selected Item :" +product, Toast.LENGTH_SHORT).show(); } }); 

Надеюсь, это поможет вам.

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

Intereting Posts
Как отменить «перетащить» движение на Android Seekbar? Где я могу найти механизм китайского рукописного распознавания для Android / IPhone? Как удалить обновления местоположения в классе обслуживания в Android? Странное поведение жизненного цикла в приложении Screen Saver Почему GridLayout не заполняет все свободное пространство? В биллинге приложения: сброс статического ответа на не приобретенный Обнаружить кнопку «Назад», но не отклонять диалоговое окно Android Bluetooth не показывает диалог сопряжения Каков рабочий каталог по умолчанию для adb push / pull и как его изменить? Повторный фон влияет на высоту TextViews 'Не удалось найти ошибку стиля mapViewStyle'. Android читает пиксели от GL_TEXTURE_EXTERNAL_OES Инструмент Google Translator Toolkit для Android и iOS: как загрузить существующие переводы? Открытие Sqlite Db в командной строке Сохранение и перезагрузка ListView с использованием общих настроек