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
Как я могу создавать HTML-страницы, которые автоматически корректируют свои изображения на разные размеры экрана для мобильных устройств? Кинжал 2: java.lang.NoSuchMethodError Как я могу увидеть содержимое sqlite db моего приложения в реальном устройстве? Имя каталога ресурсов для варианта языка? "Gradlew connectedCheck mergeAndroidReports" MissingPropertyException: Нет такого свойства: ОТЧЕТЫ Как сделать резервную копию контактов или смс на SD-карту в виде файла .xml или .csv и восстановить ее позже Обновить яркость дисплея на Android после его изменения Как получить выделенный текст из edittext в android? Выровненный по правому краю ActionBarDrawerToggle для языков RTL Android VideoView не играет Портрет Ориентация Android: обратный вызов AsyncTask для фрагмента (без активности) Как назвать приложение для Android Android & OAUTH 2.0 Android Development Tool 23.0.0 и Android L Ошибка обновления в eclipse Нет уровня соответствия компилятора Java 1.8 при запуске Android Bundle / Eclipse Juno под Oracle JDK 8