Как получить выбранный элемент в ListView?

в моем приложении Android я создал компонент ListView, называемый myList, и заполнил его объектами моего собственного типа:

class MyClass{ private String displayName; private String theValue; ... //here constructor, getters, setters and toString() are implemented } 

Я использовал ArrayAdapter для привязки объектов ArrayList к myList:

 ArrayAdapter adapter= new ArrayAdapter(this, R.layout.lay_item, theObjects); myList.setAdapter(adapter); 

Это прекрасно работает, список заполняется и т. Д., Но когда я пытаюсь получить доступ к выбранному элементу, я получаю объект Null. Я сделал это, используя

 myList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView adapter, View v, int position, long id) { MyClass selItem = (MyClass) myList.getSelectedItem(); // String value= selItem.getTheValue(); //getter method } 

В чем проблема? спасибо

По умолчанию при нажатии на элемент ListView он не изменяет свое состояние на «selected». Итак, когда событие срабатывает, и вы делаете:

 myList.getSelectedItem(); 

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

 myList.getItemAtPosition(position); 

Вы используете обработчик Click, а не Select Handler. Список по умолчанию не предполагает выбора.

Что вы должны изменить, в приведенном выше примере

 public void onItemClick(AdapterView adapter, View v, int position, long id) { MyClass item = (MyClass) adapter.getItem(position); } 

Поскольку onItemClickLitener() сам предоставит вам индекс выбранного элемента, вы можете просто сделать getItemAtPosition(i).toString() . Ниже приведен fragment кода:

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { String s = listView.getItemAtPosition(i).toString(); Toast.makeText(activity.getApplicationContext(), s, Toast.LENGTH_LONG).show(); adapter.dismiss(); // If you want to close the adapter } }); 

В приведенном выше методе параметр i фактически дает вам позицию выбранного элемента.

On onItemClick :

 String text = parent.getItemAtPosition(position).toString(); 
 myList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView adapter, View v, int position, long id) { MyClass selItem = (MyClass) adapter.getItem(position); } } 

В сенсорном режиме фокуса и выбора нет. Для выбора пользовательского интерфейса должен использовать другой тип виджетов, например, радиокнопки.

Документация по ListView об этом ужасна, просто одно неясное упоминание о setSelection .

Использование setOnItemClickListener – правильный ответ, но если у вас есть клавиатура, вы можете изменить выбор даже со стрелками (без клика), поэтому вам нужно также реализовать setOnItemSelectedListener:

 myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int position, long l) { MyObject tmp=(MyObject) adapterView.getItemAtPosition(position); } @Override public void onNothingSelected(AdapterView adapterView) { // your stuff } }); 

MyClass selItem = (MyClass) myList.getSelectedItem (); //

Вы никогда не создавали экземпляр своего classа.

  • Что такое строго типизированный вид в ASP.NET MVC
  • Как загрузить Listview «плавно» в android
  • ASP.NET MVC - просмотр с несколькими моделями
  • Элемент списка ListView с помощью настраиваемого селектора
  • Android ListView child View setEnabled () и setClickable () ничего не делают
  • android: listview в списке
  • Еще один getView вызвал несколько раз
  • Отображение изображения Qt jpg
  • Как я могу просмотреть перечисление Java из его значения String?
  • Android: как установить событие onClick для кнопки в элементе списка в ListView
  • Отображение данных Firebase в ListView
  • Давайте будем гением компьютера.