2

我在开发的应用程序中遇到了一些问题。所以,我所有的表都有主键的 _id 字段,我使用 SimpleCursorAdapter 将它们绑定到 ListViews 和 Spinners。我想知道的是如何使 ListView 或 Spinner 选定项与相应行具有相同的 ID?

奇怪的是,这适用于 ContextMenu,我直接使用 NotePad 示例:

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
info.id

此 ID 字段与表上的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 字段是一些随机的橡胶状。所以我的问题是,在第一个代码位中,AdapterContextMenuInfo获取的 Id 是什么,我如何在代码的其他部分检索它?

4

3 回答 3

3

既然您知道您正在使用 a 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)

然后将其转换为 a Cursor,也可以。

注意 1:AdapterView实际上是您的ListView.

注意 2:由于您在适配器上使用SimpleCursorAdapterthen返回定位在您指定的行getItem(position)Cursor

注意 3:当您拥有 时Cursor,您可以通过提供列索引(基于 0)或使用cursor.getString(cursor.getColumnIndex("COLUMN_NAME"))

注意 4:根据 Barak 的评论,arg参数是使用时 _ID 字段的值 a CursorAdapter,如果您只需要知道 row _ID,那么只需使用该arg值。

于 2012-05-30T11:29:41.803 回答
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; 
于 2012-05-30T12:45:32.213 回答
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 ... 希望对您有所帮助

于 2012-05-30T12:12:53.720 回答