#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();