Подтвердить что ты не робот

Как реализовать контекстное меню в ListActivity на Android?

Как вы реализуете контекстное меню, вызванное длинным щелчком, или нажмите на ListActivity, который использует встроенные макеты и ListAdapter?

4b9b3361

Ответ 1

В методе onCreate вызовите registerForContextMenu следующим образом:

registerForContextMenu(getListView());

а затем заполнить меню onCreateContextMenu (меню ContextMenu, представление вида, контекстное меню).. Аргумент 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, и этот факт явно не описан в документации, кроме как сказать, что вы используете другой метод для приема вызовов из контекстного меню; просто имейте в виду, не разделяйте идентификаторы.

В onContextItemSelected вы можете получить опцию MenuInfo и, таким образом, идентификатор элемента, выбранного по вызову getMenuInfo():

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

Ответ 3

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;
}