メイン画面でListViewを長押しするとコンテキストメニューが表示され、レコードの削除などが出来るようにしたい。
メニューリソースの作成
メニューリソースを作成する。詳細画面の表示とレコードの削除が出来るようにしたいので、その2つを定義。
menu/reclist_context_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/reclist_showDetail"
android:title="詳細" />
<item
android:id="@+id/reclist_delete"
android:title="削除" />
</menu>
コンテキストメニューを追加するためのコード
リストを長押しすると表示されるメニューはフローティング コンテキスト メニューと言うらしい。これを表示するためには、本家のガイドによると以下の手順を踏めば良い。
- registerForContextMenu() を呼び出し、View を渡して、コンテキスト メニューに関連付ける必要のある View を登録する
- Activityに onCreateContextMenu() メソッドを実装する
- メニューを選択すると呼ばれるonContextItemSelected() に所望のアクションを実装する
ListViewはMainActivity画面の中にあるので、上記メソッドをMainActivity.javaに実装することになる。まずは1.のregisterForContextMenu()をOnCreateメソッドに実装する。ListView関連部分のみを以下に抜粋。
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
:
curAdapter = new ListCursorAdapter(this, null, FLAG_REGISTER_CONTENT_OBSERVER);
ListView listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(curAdapter);
registerForContextMenu(listView);
:
}
2.のonCreateContextMenu() メソッドは以下。上記reclist_context_menu.xmlで定義したメニューが開かれる。
MainActivity.java
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.reclist_context_menu, menu);
}
3.のonContextItemSelected()へ所望のアクションを記述。とりあえず今回は、Toastに何が選択されたか表示するのにとどめる。
MainActivity.java
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.reclist_showDetail:
Toast.makeText(getApplicationContext(), "Selected Detail" + info.id, Toast.LENGTH_LONG).show();
return true;
case R.id.reclist_delete:
Toast.makeText(getApplicationContext(), "Selected Delete" + info.id, Toast.LENGTH_LONG).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
実行結果
リスト長押しでメニューが開いた状態のスクショ。
メニューを選択した後。リストのどこを選択したかがidで取得出来ている。
コメント