Androidのコンテキストメニューは、概念的にPCソフトウェアの右クリックメニューと似ています.1つのビューがコンテキストメニューに登録されているときに、オブジェクト上の[長押し](Length Push)アクション(2秒以内押し続ける)を実行すると、関連する機能を提供するフローティングメニューが表示されます.コンテキストメニューは任意のビューオブジェクトに登録できますが、最も一般的なのはリストビューListView用のitemで、リスト項目を押すと背景色が変換され、コンテキストメニューが表示されるようにプロンプトされます.(電話連絡先リストは、この特性に関する良い例を提供しています). 注:コンテキストメニュー項目はアイコンまたはショートカットキーをサポートしていません. コンテキストメニューを作成するには、このアクティブなコンテキストメニューコールバック関数:onCreateContextMenu()とonContextItemSelected()を書き換える必要があります.コールバック関数onCreateContextMenu()では、add()メソッドを使用してメニュー項目を追加したり、XMLで定義されたメニューリソースを拡張したりすることができます.そして、registerForContextMenu()でこのビューのコンテキストメニューContextMenuを登録する. 例えば、次のコードをNotepadアプリケーションに使用して、リスト内の各注釈にコンテキストメニューを追加することができる:.
- 11.public void onCreateContextMenu(ContextMenu menu, View v,
- 12. ContextMenuInfo menuInfo) {
- 13. super.onCreateContextMenu(menu, v, menuInfo);
- 14. menu.add(0, EDIT_ID, 0, "Edit");
- 15. menu.add(0, DELETE_ID, 0, "Delete");
- 16.}
- 17.
- 18.public boolean onContextItemSelected(MenuItem item) {
- 19. AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
- 20. switch (item.getItemId()) {
- 21. case EDIT_ID:
- 22. editNote(info.id);
- 23. return true;
- 24. case DELETE_ID:
- 25. deleteNote(info.id);
- 26. return true;
- 27. default:
- 28. return super.onContextItemSelected(item);
- 29. }
- 30.}
- 31.
onCreateContextMenu()では、MenuItemsを追加するContextMenuの他に、選択したオブジェクトに関する追加情報を提供するコンテキストメニュー情報ContextMenuInfoオブジェクトを指定する必要があります.この例では、onCreateContextMenu()は特に何もしていません.メニュー項目を追加しただけです.onContextItemSelected()コールバック関数では、現在選択されているアイテムの情報を提供するAdapterContextMenuInfoをMenuItemから要求します.私たちはこの選択項目のリストIDだけを必要としているので、コメントを編集しても削除しても、このオブジェクトのAdapterContextMenuInfoを通じています.infoフィールドでIDを見つけます.このIDは、対応する動作を実行するためにeditNote()およびdeleteNote()メソッドに渡される. リストビュー内のすべてのアイテムにコンテキストメニューを登録するには、registerForContextMenu(View)メソッド:にリストビューオブジェクト全体を渡すことができます.
registerForContextMenu(getListView()); は、コンテキストメニューを登録するために任意のビューオブジェクトを渡すことができることを覚えています.ここで、getListView()は、Notepadアプリケーションで使用されるリストアクティビティListActivityのリストビューオブジェクトを返す.これにより、このリストの任意のitemがこのコンテキストメニューに登録されます.