我正在开发的应用程序中遇到一些问题。 因此,我的所有表都有主键的_id字段,我使用SimpleCursorAdapter将它们绑定到ListViews和Spinners。 我想知道的是如何使ListView或Spinner选中的项具有与相应行相同的ID?
奇怪的是,这适用于ContextMenu,我直接使用NotePad示例:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
info.id
此ID字段 IS 与表格上的RowID相同,我可以删除项目,但是当我尝试这样的事情时:
getListView().setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view,
int position, long arg) {
Intent i = new Intent(getApplicationContext(),
FuelingList.class);
long id = view.getId();
ID字段是随机的橡皮。 所以我的问题是,在第一个代码位中,Id是 AdapterContextMenuInfo 获取的内容以及如何在代码的其他部分中检索它?
答案 0 :(得分:3)
由于您知道自己使用的是SimpleCursorAdapter
,因此在onItemClick
方法中,您可以致电
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
String value = ((SimpleCursorAdapter) adapter.getAdapter()).getCursor().getString(COLUMN_INDEX);
}
要从当前选择的游标行中获取的列中的COLUMN_INDEX
。
或者,拨打
adapter.getAdapter().getItem(position)
然后将其转换为Cursor
,也可以。
注意1:AdapterView
实际上是您的ListView
。
注意2:由于您使用SimpleCursorAdapter
,然后适配器上的getItem(position)
会返回位于您指定行的Cursor
注意3:当您拥有Cursor
时,您可以通过提供列索引(基于0)或使用cursor.getString(cursor.getColumnIndex("COLUMN_NAME"))
注4:根据Barak的评论,arg
参数是使用CursorAdapter
时来自_ID字段的值,如果您需要知道的是行_ID
,那么只需使用arg
值。
答案 1 :(得分:3)
由于您使用的是SimpleCursorAdapter,onItemClick会将数据库行ID传递给您。
public void onItemClick(AdapterView<?> adapter, View view, int position, long arg)
long arg
部分实际上是数据库中的行ID。
所以你的代码应该是:
getListView().setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapter, View view,
int position, long arg) {
Intent i = new Intent(getApplicationContext(),
FuelingList.class);
long id = arg;
答案 2 :(得分:0)
您可以将行的ID存储在一个arraylist中,并从arraylist的相应位置获取该行的id。这对我有用..
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Intent intent=new Intent(this , Details.class);
Bundle extras = new Bundle();
extras.putLong("ID", IDList.get(position));
intent.putExtras(extras);
startActivityForResult(intent, SHOW_DETAILS);
}
你可以使用listview.setonitenclicklistener ...希望它有所帮助