Получение данных из пользовательского списка по клику

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

Это код, который у меня есть до сих пор:

listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String value; // value = (get value of TextView here) } }); 

Я хочу, чтобы иметь возможность присваивать value тексту одного из TextView.

Хотя предложения @ Сэма будут отлично работать в большинстве сценариев, я фактически предпочитаю использовать поставляемый AdapterView в onItemClick(...) для этого:

 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Person person = (Person) parent.getItemAtPosition(position); // ... } 

Я считаю, что это немного более безупречный подход, так как AdapterView учитывает любые заголовки, которые потенциально могут быть добавлены с помощью ListView.addHeaderView(...) .

Например, если ваш ListView содержит один заголовок, нажатие на первый элемент, предоставленный адаптером, приведет к тому, что переменная position иметь значение 1 (а не 0 , что является стандартным случаем без заголовков), поскольку заголовок занимает позицию 0 . Следовательно, очень легко ошибочно получить неверные данные для позиции и ввести ArrayIndexOutOfBoundsException для последнего элемента списка. AdapterView элемент из AdapterView , позиция автоматически смещается правильно. Вы можете, конечно, вручную исправить это, но почему бы не использовать предоставленные инструменты? 🙂

Просто FYI и FWIW.

У вас есть несколько вариантов. Я ссылаюсь на код из вашего предыдущего вопроса .

  • Вы можете получить доступ к этим данным из view макета строки:

     ViewHolder holder = (ViewHolder) view.getTag(); // Now use holder.name.getText().toString() and holder.description as you please 
  • Вы можете получить доступ к адаптеру с position :

     Person person = mAdapter.getItem(position); // Now use person.name and person.description as you please 

(Кстати, в вашем классе Person name и description являются public поэтому вам не нужны методы get.)

Переопределите следующий метод в adaterclass.

 public String[] getText() { return text; }