Android長押し表示コンテキストメニューコード

3749 ワード

Android長押し表示コンテキストメニューコード

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がこのコンテキストメニューに登録されます.