доступ к элементу в listview

#android #listview #textview

#Android #просмотр списка #textview

Вопрос:

введите описание изображения здесь

У меня есть список игроков, чьи имена отображаются в listview. и каждая строка listview содержит button, textview и imageview. Как я могу получить значение textview?

Ответ №1:

Если вы используете пользовательский класс адаптера для заполнения listview, то в вашем адаптере вы можете использовать HashMap для сохранения пары ключ-значение, сохранения позиции listitem с данными в этом textview. и затем вы можете легко получить его в OnItemClickListener из listview.

Ответ №2:

В зависимости от специфики вашей реализации я бы выбрал один из следующих подходов.

Вариант A. Используйте setOnItemClickListener для регистрации прослушивателя кликов в списке (или, если вы используете ListActivity или ListFragment, просто используйте [ onListItemClick ](http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long))). onItemClick передается в представлении, на которое был сделан щелчок, и может использоваться для извлечения вложенных представлений, например, TextView, который вы ищете.

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        TextView tv = (TextView) view.findViewById(R.id.textview);
        String tvText = tv.getText();
    }
}
  

Вариант B
Предполагая, что вы заполняете свой список из какой-либо коллекции данных, вы можете сделать что-то похожее на описанное выше, но используйте переданный position параметр в качестве индекса, чтобы напрямую получать текст из объектов в вашей коллекции; т.Е.:

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        SomeObject so = myCollection.get(position);
        String tvText = so.getTextViewText();
    }
}
  

Однако есть еще много вариантов. Мне вроде как нравится создавать собственное расширение ArrayAdapter для хранения моделей для представлений элементов в списке. Таким образом, вы также могли бы вызвать getItemAtPosition(int position) or getItem(int position) и привести возвращаемый объект к вашему типу данных.

Ответ №3:

Это статический список или динамически сгенерированный?
Если он статический, вы можете присвоить другой идентификатор каждому textview в самом xml, а затем использовать findViewById для доступа к нему.
Если это не так, это то, что вам нужно сделать: у вас, очевидно, будет одна строка, и вы будете отображать ее много раз. Таким образом, несколько textviews будут иметь одинаковый идентификатор.
Используйте цикл for, внутри которого используйте findViewById (помните, что findViewById будет обращаться только к первому элементу с указанным идентификатором, установите его идентификатор на что-то другое, на следующей итерации выбирается следующий textview, установите его идентификатор на что-то), затем используйте эти новые идентификаторы для доступа к ним, таким образом, вы можете получить доступ к каждому textview

Комментарии:

1. затем используйте их следующим образом: EditText et1 = (EditText) findViewById(R.id.editText1); Строковое имя пользователя = et1.getText().toString();