Android長押し表示コンテキストメニューコード
3749 ワード
Android長押し表示コンテキストメニューコード
処理長時間通りに、onItemLongClickをtrueに戻すことに注意してください.そうしないと、長押しはsetOnItemClickListenerを実行します.
=============================================================
コンテキストメニューContext Menu
Androidのコンテキストメニューは概念的にPCソフトの右クリックメニューと似ています.1つのビューがコンテキストメニューに登録されているときに、オブジェクト上の[長押し](Length Push)アクション(2秒以内押し続ける)を実行すると、関連する機能を提供するフローティングメニューが表示されます.コンテキストメニューは任意のビューオブジェクトに登録できますが、最も一般的なのはリストビューListView用のitemで、リスト項目を押すと背景色が変換され、コンテキストメニューが表示されるようにプロンプトされます.(電話連絡先リストは、この特性に関する良い例を提供しています).
注:コンテキストメニュー項目では、アイコンまたはショートカットキーはサポートされていません.
コンテキストメニューを作成するには、このアクティブなコンテキストメニューコールバック関数:onCreateContextMenu()とonContextItemSelected()を書き換える必要があります.コールバック関数onCreateContextMenu()では、add()メソッドを使用してメニュー項目を追加したり、XMLで定義されたメニューリソースを拡張したりすることができます.そして、registerForContextMenu()でこのビューのコンテキストメニューContextMenuを登録する.
たとえば、次のコードをNotepadアプリケーションで使用して、リスト内のコメントごとにコンテキストメニューを追加できます.
onCreateContextMenu()では、MenuItemsを追加するContextMenuを指定するほか、選択したオブジェクトの追加情報を提供するコンテキストメニュー情報ContextMenuInfoオブジェクトを指定する必要があります.この例では、onCreateContextMenu()は特に何もしていません.メニュー項目を追加しただけです.
onContextItemSelected()コールバック関数では、現在選択されているアイテムの情報を提供するAdapterContextMenuInfoをMenuItemから要求します.私たちはこの選択項目のリストIDだけを必要としているので、コメントを編集しても削除しても、このオブジェクトのAdapterContextMenuInfoを通じています.infoフィールドでIDを見つけます.このIDは、対応する動作を実行するためにeditNote()およびdeleteNote()メソッドに渡される.
リストビュー内のすべてのアイテムにコンテキストメニューを登録するには、registerForContextMenu(View)メソッドにリストビューオブジェクト全体を渡すことができます.
コンテキストメニューを登録するには、任意のビューオブジェクトを渡すことができます.ここで、getListView()は、Notepadアプリケーションで使用されるリストアクティビティListActivityのリストビューオブジェクトを返す.これにより、このリストの任意のitemがこのコンテキストメニューに登録されます.
private ListView fileList;
fileList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo info) {
// TODO Auto-generated method stub
menu.setHeaderTitle(R.string.contentMenu);
menu.add(0, AndBoxConstant.OPEN, 0, R.string.open);
menu.add(0, AndBoxConstant.PROPERTIY, 6, R.string.properties);
}
});
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case AndBoxConstant.OPEN:
.........
break;
case AndBoxConstant.PROPERTIY:
.........
break;
default:
break;
}
return super.onContextItemSelected(item);
}
fileList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> ada, View view, int index, long longIndex) {
fileList.showContextMenu();
return true;
}
});
処理長時間通りに、onItemLongClickをtrueに戻すことに注意してください.そうしないと、長押しはsetOnItemClickListenerを実行します.
=============================================================
コンテキストメニューContext Menu
Androidのコンテキストメニューは概念的にPCソフトの右クリックメニューと似ています.1つのビューがコンテキストメニューに登録されているときに、オブジェクト上の[長押し](Length Push)アクション(2秒以内押し続ける)を実行すると、関連する機能を提供するフローティングメニューが表示されます.コンテキストメニューは任意のビューオブジェクトに登録できますが、最も一般的なのはリストビューListView用のitemで、リスト項目を押すと背景色が変換され、コンテキストメニューが表示されるようにプロンプトされます.(電話連絡先リストは、この特性に関する良い例を提供しています).
注:コンテキストメニュー項目では、アイコンまたはショートカットキーはサポートされていません.
コンテキストメニューを作成するには、このアクティブなコンテキストメニューコールバック関数:onCreateContextMenu()とonContextItemSelected()を書き換える必要があります.コールバック関数onCreateContextMenu()では、add()メソッドを使用してメニュー項目を追加したり、XMLで定義されたメニューリソースを拡張したりすることができます.そして、registerForContextMenu()でこのビューのコンテキストメニューContextMenuを登録する.
たとえば、次のコードをNotepadアプリケーションで使用して、リスト内のコメントごとにコンテキストメニューを追加できます.
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, EDIT_ID, 0, "Edit");
menu.add(0, DELETE_ID, 0, "Delete");
}
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case EDIT_ID:
editNote(info.id);
return true;
case DELETE_ID:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
onCreateContextMenu()では、MenuItemsを追加するContextMenuを指定するほか、選択したオブジェクトの追加情報を提供するコンテキストメニュー情報ContextMenuInfoオブジェクトを指定する必要があります.この例では、onCreateContextMenu()は特に何もしていません.メニュー項目を追加しただけです.
onContextItemSelected()コールバック関数では、現在選択されているアイテムの情報を提供するAdapterContextMenuInfoをMenuItemから要求します.私たちはこの選択項目のリストIDだけを必要としているので、コメントを編集しても削除しても、このオブジェクトのAdapterContextMenuInfoを通じています.infoフィールドでIDを見つけます.このIDは、対応する動作を実行するためにeditNote()およびdeleteNote()メソッドに渡される.
リストビュー内のすべてのアイテムにコンテキストメニューを登録するには、registerForContextMenu(View)メソッドにリストビューオブジェクト全体を渡すことができます.
registerForContextMenu(getListView());
コンテキストメニューを登録するには、任意のビューオブジェクトを渡すことができます.ここで、getListView()は、Notepadアプリケーションで使用されるリストアクティビティListActivityのリストビューオブジェクトを返す.これにより、このリストの任意のitemがこのコンテキストメニューに登録されます.