Я изучаю Программирование для Android. У Activity есть ListView, в котором каждый элемент является только TextView. Этот ListView заполняется пользовательским адаптером, который выполняет итерацию через ArrayList cRecord и устанавливает соответствующий текст для каждого TextView. Этот класс cRecord имеет много «полей» (участников), например. имя человека, номер телефона ... но только имя человека отображается в ListView. Теперь, когда пользователь нажимает на ListView, чтобы выбрать человека, как мы можем добраться до исходного объекта типа cRecord, соответствующего этому человеку?Когда пользователь выбирает элемент ListView, как найти базовый объект?
ответ
Я попытался решить это, построив прототип требования.
Я предполагал этот как ваш класс cRecord:
public class cRecord{
String name;
String phoneNo;
//GETTERS AND SETTERS IF ANY
//METHOD IMPLEMENTATIONS IF ANY
}
Вы можете иметь метод GetObject в своей деятельности, которая будет возвращать объект из списка cRecord, который вы используете для заполнения ListAdapter:
public cRecord getObject(String name){
forech(cRecord c : listcRecord){
if(c.name == name){
return c;
}
}
return null;
}
И, наконец, в OnListItemClicked слушателем вашего ListView, вы можете получить щелкнул объект вроде этого:
ListView lv = (ListView)findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter<Country>(
this,R.layout.list_black_text,R.id.list_content, values)); //values is the list holding objects of cRecord and R.id.list_content is the textview which you are using in your list to show the name.
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView textView = (TextView) view.findViewById(R.id.list_content);
String text = textView.getText().toString(); //Getting the text of view being clicked.
cRecord clickedObject = getObject(text); //Calling your getObject method here.
Toast.makeText(this,"phoneNo of " + clickedObject.phoneNo, Toast.LENGTH_SHORT).show();
}});
Если это не поможет, вы можете указать свой собственный код, чтобы вопрос был немного более ясным.
Вы понимаете, что если это работает, это случайно? ('listcRecord.get (position)' будет более безопасным) – njzk2
Да. Получение требуемого объекта может осуществляться тысячами способов. Я просто показал простой, например, поиск и извлечение. –
Я имею в виду, что 'if (c.name == name) {' скорее всего, не будет работать во многих случаях. это не то, как вы сравниваете строки. – njzk2
Сначала вам необходимо установить OnItemClickListener callback Object, используя метод ListView setOnItemClickListener(AdapterView.OnItemClickListener listener).
OnItemClickListener является Интерфейс пользователя одним способом: onItemClick(AdapterView the_list, View view_clicked, int position_of_view_clicked, long id);
Если вы используете пользовательский Adapter, предоставленный идентификатор будет возвращен методом Adapter#getItemId(int position).
Кроме того, вы можете настроить пользовательский адаптер getItem(int position), чтобы вернуть определенный объект. Этот объект будет доступен в объекте обратного вызова OnItemClickListener через AdapterView#getItemAtPosition(int position).
Примером может быть:
Определение функции обратного вызова
import android.widget.AdapterView;
...
public class ... {
class ListCallback implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> list, View list_element, int position, long id) {
// Operations to access the appropriate record and show it
// To get the Adapter#getItem(int) result, use
// ObjectClass a = (ObjectClass) list.getItemAtPosition(position)
}
}
}
Установка Обратный вызов
import android.widget.ListView;
...
public class ... {
private ListView the_list;
/* method where the list is managed() */
the_list = (ListView) findViewById(R.id.list_id);
the_list.setOnItemClickListener(new ListCallBack());
}
Обратите внимание, что обратный вызов объекта является стандартом объекта.
Вы можете также определить объект обратного вызова в одном кадре, как это:
import android.widget.AdapterView;
import android.widget.ListView;
...
public class ... {
private ListView the_list;
/* method where the list is managed() */
the_list = (ListView) findViewById(R.id.list_id);
the_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> list, View list_element, int position, long id) {
// Operations to access the appropriate record and show it
// To get the Adapter#getItem(int) result, use
// ObjectClass a = (ObjectClass) list.getItemAtPosition(position)
});
}
- 1. Ловить, когда пользователь выбирает элемент из CComboBox
- 2. Как вызвать событие, когда пользователь «наконец» выбирает элемент в списке?
- 3. Как закрыть редактор QComboBox в делегате, когда пользователь выбирает элемент
- 4. Как скрыть список, когда пользователь выбирает элемент из списка?
- 5. Цвет селектора ListView выбирает весь объект, а не каждый элемент
- 6. Изменение шаблона данных, когда пользователь его выбирает
- 7. Потеря выбранного значения, когда пользователь выбирает другой элемент внутри другого ListView
- 8. Скрытый список, когда пользователь выбирает элемент в emberjs 2
- 9. выполните функцию javascript, когда пользователь выбирает файл
- 10. Как узнать, когда пользователь выбирает абзац?
- 11. Notiication, когда пользователь выбирает элемент из уведомлений центра
- 12. Как удалить элемент ListView JavaFX, когда пользователь «стирает» его?
- 13. Win8 ListView Tap не выбирает элемент
- 14. Заполните наклейки, когда пользователь выбирает раскрывающийся список
- 15. Парадигматический сигнал, когда пользователь выбирает строку
- 16. Как определить, когда пользователь выбирает пункт меню с помощью ShareActionProvider?
- 17. ListView мерцает, когда объект сфокусирован
- 18. C# ListView - обнаружение, когда пользователь отменяет выбор элемента или выбирает новый
- 19. Закрыть AlertDialog, когда пользователь выбирает опцию
- 20. Отключить ввод текста, когда пользователь выбирает параметр
- 21. NullPointerException, когда пользователь выбирает фон из галереи
- 22. вызова функция, когда пользователь выбирает опцию
- 23. Щелкните элемент в ListView всегда выбирает элемент с индексом 0
- 24. QT: пользователь выбирает действия
- 25. Получить элемент, который пользователь не выбирает в ASP CheckBoxList
- 26. SPGridView - Пользователь, который выбирает столбцы
- 27. JQuery копировать/добавить элемент, базовый объект удален
- 28. Как сделать бит ложным, когда пользователь выбирает флажок в gridview
- 29. Twitter bootstrap + asp.net masterpages, как установить элемент navbar как активный, когда пользователь его выбирает?
- 30. ListView не выбирает правильную строку
в вашем слушателем, вы позиция, это объясняется в док. адаптер поддерживается списком 'cRecord', поэтому у вас это есть. объединение не должно быть слишком сложным – njzk2
njzk2 Но может быть, что не все объекты всего массива ArrayList имеют аналог в ListView. – AlwaysLearning
Что вы подразумеваете под этим? Вы заполняете Listview, предоставляя ему Arraylist объектов.Когда пользователь нажимает на 5-й объект в списке, вы просматриваете 5-й объект в Arraylist. – poss