コンテキスト メニューを操作できるように、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);
}