присвоение скрытых значений элементу списка

У меня есть действие, которое расширяет ListView. Я заполняю свой список результатами запроса к базе данных sqlite. Элемент списка состоит из start_time, end_time, client_name и status. Это 4 бита информации, которые мне нужно отображать для каждого элемента списка.

У меня вопрос: можно ли мне назначить скрытые элементы этому элементу ListView?

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

РЕДАКТИРОВАТЬ

Код, который я использую для заполнения списка из моего курсора:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME};

// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display  };

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to);

Где R.layout.list_item - это XML для моего элемента списка. Я пришел из PHP / HTML-фона, поэтому обычно я использую скрытое поле для хранения значения _id, к которому я мог бы получить доступ после щелчка по элементу списка. я могу сделать что-то подобное в Android? я могу поместить скрытое поле _id в свой макет xml?

9
задан Janusz 27 January 2012 в 08:46
поделиться

2 ответа

Вы должны попытаться расслабиться из настроения веб-разработки. Нет необходимости хранить такую ​​вещь, как идентификатор, в скрытом поле в вашем представлении. Это смешало бы ваши данные с вашим пользовательским интерфейсом и создало бы много путаницы и ненужных объектов просмотра.

Если вы используете базу данных sqlite для хранения значений, вам следует использовать CursorAdapter для управления элементами списка. CursorAdapter сохраняет результат, полученный вами из базы данных, и управляет тем, как данные отображаются для пользователя. Если вы затем зарегистрируете onItemClickListener в своем ListView , прослушиватель получит адаптер и позицию элемента данных, ячейка которого была нажата в адаптере. Теперь вы можете использовать getItem для извлечения курсора, указывающего на результат базы данных, который использовался для создания элемента списка. Теперь вы можете получить идентификатор или все другие значения, которые не отображаются пользователю, из результата базы данных и присоединить его к намерению начать следующее действие.

19
ответ дан 4 December 2019 в 10:30
поделиться

Вам следует подумать о создании java-объекта, который бы собирал всю эту информацию. Например, вы можете создать класс типа "ListItem", и каждый элемент будет иметь 5 свойств:
время_начала
время_окончания
имя_клиента
статус id (и больше, если вам нужно)

И затем, у вас есть 2 варианта, либо вы сериализуете свой объект, чтобы поместить весь объект в базу данных, либо вы сохраняете структуру, которая у вас уже есть (я полагаю), и каждая строка вашей базы данных становится объектом ListItem. Затем, когда вы запрашиваете свою базу данных, вы помещаете их все в ArrayList, и расширяете ArrayAdapter, чтобы сделать свой собственный адаптер. Наконец, в методе getView вы вызываете myListItem.getEnd_Time и все необходимые методы для отображения данных, и просто не используете getId, который вы можете напрямую использовать из адаптера, когда вам нужен объект.

1
ответ дан 4 December 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: