1

を使用して作成しListViewCursorAdapterデータベースのテーブルを入力しました。それを追加した後、テーブルから選択情報ContextMenuの目的の行を長押しします。ListView

問題は次のとおりです。その1行の情報を収集できずListView、各行で同じ結果が得られます。クエリで何か間違ったことをしていると思います。

onCreate

private void createTabRegistry(SQLiteDatabase db)
    {
        String sql = "CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT, {2} TEXT,{3} INTEGER,{4} TEXT,{5} TEXT,{6} TEXT, {7} TEXT);";
            db.execSQL(MessageFormat.format(sql, TabRegistry.TABLE_NAME, TabRegistry._ID,TabRegistry.TYPE, TabRegistry.DATE, TabRegistry.STATUS, TabRegistry.NUMBER, TabRegistry.MESSAGE, TabRegistry.OTHER));
    }

dbクラスでの私のクエリ:

public Cursor getRegistry2(long id) {
        return (getReadableDatabase().query(
            TabRegistry.TABLE_NAME, 
            TabRegistry.COLUMNS,
            TabRegistry._ID + " = " + id,
            null,
            null,
            null, 
            null, 
            null));
    }

ContextMenu私の活動のID :

 AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
 id = getListAdapter().getItemId(info.position);

アクティビティクラスのカーソル:

Cursor c3 = databaseHelper.getRegistry2(id);
if (c3 != null) {
        c3.moveToFirst();
    }                     

dbnumber = (c3.getString(c3.getColumnIndex(TabRegistry.NUMBER))); 

dbnumberその不思議の行の値を文字列に割り当てるにはどうすればよいListViewですか?

動作するコードを編集しますが、listviewのビューをリセットします...。

Cursor c3 = (Cursor) getListAdapter().getItem(info.position);
                        startManagingCursor(c3);
                          aaaaa = c3.getString(c3.getColumnIndex(TabRegistry.NUMBER));
                         c3.close();
4

1 に答える 1

2

AdapterView.AdapterContextMenuInfoidその選択された行のデータベースからの行IDを表すというフィールドがあります。positionリスト内の位置を表すフィールドではなく、その ID を照会する必要があります。

rowId = info.id;

次に、データベースにクエリを実行して、rowIdそのアイテムのデータを取得します。

編集:

おそらく、追加したソリューションを使用したくないでしょう。カーソルを閉じると、データがなくなります(onCreateメソッドでのみデータベースを照会する可能性があるため、アクティビティを再開する必要があるのはそのためです)。

リスト内の異なる行info.idを長押しすると(おそらく) 異なる行 ID が選択されることを意味します) 。ContextMenuContextMenu

問題の原因がわかりません(削除が機能する場合、アクティビティに何かがあると思います)。そのため、このタイプのコードを確認できるように、あなたがしようとしていることの小さな例を作成しました。

http://pastebin.com/Yri03S0T

于 2012-04-20T16:52:01.097 に答える