присвоение скрытых значений элементу списка - PullRequest
9 голосов
/ 16 августа 2010

У меня есть действие, которое расширяет 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?

Ответы [ 3 ]

19 голосов
/ 16 августа 2010

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

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

1 голос
/ 16 августа 2010

Вы должны подумать о создании объекта Java, который собрал бы всю эту информацию.например, вы можете создать класс, подобный «ListItem», и у каждого элемента будет 5 свойств:
start_time
end_time
client_name
идентификатор статуса (и больше, если вам нужно)

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

0 голосов
/ 25 ноября 2013

Если вам нужно не отображать столбцы БД, кроме _id, в onItemClick (...) вашего ListView Вы просто звоните:

mAdapter.getCursor();

Затем вы можете получить любые не отображаемые столбцы выбранного элемента / строки списка.

Как упоминал Януш, если вам нужен только _id, просто позвоните:

mAdapter.getItemId();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...