web-dev-qa-db-ja.com

AndroidのListActivityにコンテキストメニューをどのように実装しますか?

組み込みのレイアウトとListAdapterを使用しているListActivityを長クリックまたはタップすることでトリガーされるコンテキストメニューを実装するにはどうすればよいですか?

39
pupeno

OnCreateメソッド呼び出し registerForContextMen の場合、次のようになります。

registerForContextMenu(getListView());

onCreateContextMenu(ContextMenu menu、View view、ContextMenuInfo menuInfo) にメニューを入力します。 menuInfo引数は、このようにしてロングクリックされたアイテムに関する情報を提供できます。

AdapterView.AdapterContextMenuInfo info;
try {
    info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return;
}
long id = getListAdapter().getItemId(info.position);

menu.add を呼び出して通常の方法でメニュー項目を追加します。

menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string);

ユーザーがオプションを選択すると、 onContextItemSelected が呼び出されます。また、 onMenuItemSelected であり、この事実は、他のメソッドを使用してコンテキストメニューからの呼び出しを受け取ることを除いて、ドキュメントでは明示的に説明されていません。 IDを共有しないでください。

OnContextItemSelectedでは、MenuInfo、つまり getMenuInfo() を呼び出して選択したアイテムのIDを取得できます。

try {
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
    Log.e(TAG, "bad menuInfo", e);
    return false;
}
long id = getListAdapter().getItemId(info.position);
74
pupeno

Activity.registerForContextMenu(View) も確認してください。

14
Romain Guy
listView = (ListView) findViewById(R.id.listpockets);
registerForContextMenu(listView);



public void onCreateContextMenu(Android.view.ContextMenu menu, View v, Android.view.ContextMenu.ContextMenuInfo menuInfo) {
    //AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(getString(R.string.titleDelete));   
    menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete));
};
@Override
public boolean onContextItemSelected(MenuItem item) {

    if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID)
    {
       AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
       long id = this.listView.getItemIdAtPosition(info.position);
       Log.d(TAG, "Item ID at POSITION:"+id);
    }
    else
    {
        return false;
    }
    return true;
}
5
Dhiral Pandya