android:识别ListView行中的各个项目?

时间:2011-02-24 03:14:13

标签: android listview row items identify

我在ListActivity中有一个由数据库表填充的ListView。 ListView的每一行都是一个RelativeLayout,其中包含三个名为rowid,date和name的TextView。我可以使用ListView的.setSelection(int position)方法以编程方式选择单个行。

以下是我要做的事情:当我按下界面上的按钮时,从当前选定的列表行获取rowid,并使用rowid执行db查询。我无法弄清楚如何从列表本身获取rowid。 rowid可能与列表中的ID或位置不同,因为它是数据库中的rowid。

我怀疑这需要使用适配器,但我一直在尝试/搜索网络一周,但无法解决这个问题。感谢任何人都能提供的帮助。

2 个答案:

答案 0 :(得分:3)

您知道当前所选项目的列表位置,您在ListView外部有一个按钮,该按钮应该触发对该项目的某些操作,并且您不仅可以使ListView行(或每行中的某些子视图)可单击。正确?

您可以从列表的适配器获取信息。 getItem(int position)返回由位置列表项表示的对象,因此如果它存储在对象中,您可以直接检索所需的信息。 getView(int position)返回行的视图,允许您使用findViewById(int id)来检索TextView。

如果您还没有适配器,可以使用getAdapter()从ListView获取适配器。

// 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 :(得分:1)

我最后使用以下代码使用最后一个方法。

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

我必须做的唯一改变是在.findViewByID中的参数中添加null,null

TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null);