web-dev-qa-db-ja.com

「コンテキストメニュー」とメソッドregisterForContextMenu()とは

Activityクラスには、registerForContextMenu(View view)というメソッドがあります。

Androidドキュメントでは、このメソッドを使用して、特定のビューに表示されるコンテキストメニューを登録することが説明されています(複数のビューでコンテキストメニューを表示できます)。

  • コンテキストメニュー」とはどういう意味ですか?それは物理的なメニューボタンを意味しますか?
  • メソッドregisterForContextMenu(View view)についても説明が必要ですが、ドキュメントをオンラインで読むだけではわかりません。
17
Leem.fin

これは基本的に、特定のUI要素(通常はListViewの項目)をロングクリックしたときに表示されるポップアップメニューです。

開発者ガイドの Menus セクションをご覧ください。

11
Chris

これはAndroid開発者: メニュー-Android開発者

コンテキストメニューは、ユーザーが要素をロングクリックしたときに表示されるフローティングメニューです。選択したコンテンツまたはコンテキストフレームに影響を与えるアクションを提供します。

リストビューにconextメニューが必要だと想像してみてください

//Constants for context menu options
public static final int MENU_MARK = 1;
public static final int MENU_REMOVE = 2;

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    ...
    ...
    // Specify that your listview has a context menu attached
    registerForContextMenu(getListView());
}

// here you create the context menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, 
   ContextMenuInfo menuInfo) {
  menu.add(Menu.NONE, MENU_MARK, Menu.NONE, "MARK");
  menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, "Remove");
}

// This is executed when the user selects an option
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
    case MENU_MARK:
        mark_item(info.id);
        return true;
    case MENU_REMOVE:
        delete_item(info.id);
        return true;
    default:
        return super.onContextItemSelected(item);
   }
}
7
i.masm