Android: определить отдельные элементы в строке ListView? - PullRequest
3 голосов
/ 24 февраля 2011

У меня есть ListView в ListActivity, заполненный таблицей базы данных. Каждая строка ListView представляет собой RelativeLayout с тремя TextViews, названными rowid, date и name в указанном порядке. Я могу выбрать отдельные строки программно с помощью метода .setSelection (int position) ListView.

Вот что я пытаюсь сделать: когда я нажимаю кнопку на интерфейсе, получаю rowid из текущей выбранной строки списка и выполняю запрос базы данных, используя rowid. Я не могу понять, как получить rowid из самого списка. rowid может не совпадать с идентификатором или позицией в списке, поскольку это rowid в базе данных.

Я подозреваю, что это потребует работы с адаптером, но я пробовал / искал в Интернете в течение недели и не смог понять это. Спасибо за помощь, которую может оказать любой.

Ответы [ 2 ]

3 голосов
/ 24 февраля 2011

Вы знаете позицию списка выбранного в данный момент элемента, у вас есть кнопка вне ListView, которая должна вызвать какое-то действие с этим элементом, и вы не просто делаете строки ListView (или некоторые дочерние представления в каждой строке) кликабельными , Правильно?

Вы можете получить информацию из адаптера списка. getItem (int position) возвращает объект, представленный элементом списка в позиции, так что вы можете получить нужную информацию напрямую, если она хранится в объекте. getView (int position) возвращает представление для строки, позволяя вам использовать findViewById (int id) для извлечения вашего TextView.

Если у вас еще нет адаптера, вы можете получить его из ListView с помощью getAdapter ().

// ListView myListView = the ListView in question
// int selectedRow = the currently selected row in the ListView
// Each row in the ListView is backed by an object of type MyCustomDataClass

int dbRowId;
Adapter adapter = myListView.getAdapter();

MyCustomDataClass data = (MyCustomDataClass) adapter.getItem(selectedRow);
dbRowId = data.getDatabaseRowId();
// OR
dbRowId = data.rowId;
// OR whatever method the object has for getting the ID.

// OR
View listViewRow = adapter.getView(selectedRow);
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid);
String dbRowAsString = dbRowView.getText().toString();
dbRowId = Integer.parseInt(dbRowAsString);

Вы также можете подумать, будет ли для пользователя более естественным просто коснуться строки ListView, а не выбирать строку и затем нажимать другую кнопку. Ответ Рено может сработать лучше.

1 голос
/ 25 февраля 2011

Я использовал последний метод со следующим кодом.

int dbRowId;
Adapter adapter = myListView.getAdapter();

View listViewRow = adapter.getView(selectedRow);
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null);
String dbRowAsString = dbRowView.getText().toString();
dbRowId = Integer.parseInt(dbRowAsString);

Единственное изменение, которое я должен был сделать, это добавить null, null к параметрам в .findViewByID

TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...