6

コンテキスト メニューを操作できるように、ID だけでなく、カーソルの現在のレコードを取得したいと考えています。

ID を取得する方法を示すこの例をここで見ました。

 @Override
  public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case DELETE_ID:
        AdapterView.AdapterContextMenuInfo info=
          (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

        delete(info.id);
        return(true);
    }

    return(super.onOptionsItemSelected(item));
  }

これは、クリックされたコンテキスト メニューの適切な SQLite データベース ID を取得できるため、ルックアップを行う関数を記述できるため、非常に便利です。しかし、確かに現在のカーソルを再利用できますか?

私はこれをやってみました:

Cursor c = (Cursor) this.getListAdapter().getItem((int) info.id);
String itemPriority = c.getInt(1);  
Log.v(TAG, "Current item:" + itemPriority);

しかし、カーソル行は、私が求めているレコードではなく、データベースのスキーマだけを返すようです。

誰かが光を当ててくれませんか。

編集: @azgolfer のおかげで解決策が見つかりました。fillData() メソッドを使用してアダプターにデータを取り込みます。通常、これは変数なしで宣言されます。このメソッドをフィールド変数で再定義する必要がありました。onContextItemSelected でカーソル アダプタを表示するためのコードの関連部分は次のとおりです。

private void fillData() {
    Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId, mStatusFilter);
    startManagingCursor(itemsCursor);
    mItemAdaptor = new ItemAdapter(this, itemsCursor);
    this.setListAdapter(mItemAdaptor);      
}
4

1 に答える 1

14

CursorAdapterを使用してリストアイテムを表示していますよね?次に、CursorAdapter自体でgetCursor()を呼び出すことにより、カーソルにアクセスできます。カーソルから正しいレコードを取得するには、ユーザーが押したアイテムの位置を取得してから、カーソルをその位置に移動してデータを取得する必要があります。

まず、ユーザーが押したものの位置を決定します。

AdapterView.AdapterContextMenuInfo info=
      (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int itemPosition = info.position; 

次に、カーソルを目的の位置に移動して、レコードを取得します。

Cursor cursor = (Your cursorAdapter).getCursor();
cursor.moveToPosition(itemPosition);
String itemPriority = cursor.getInt(1);  
Log.v(TAG, "Current item:" + itemPriority);
于 2012-07-26T22:46:53.920 に答える