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

голоса
39

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

Задан 11/01/2009 в 22:32
источник пользователем
На других языках...                            


3 ответов

голоса
73

На OnCreate вызова метода registerForContextMenu , как это:

registerForContextMenu(getListView());

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

На 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);
Ответил 12/01/2009 d 21:09
источник пользователем

голоса
14

Вы также должны смотреть на Activity.registerForContextMenu (View) .

Ответил 13/01/2009 d 08:15
источник пользователем

голоса
5
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;
}
Ответил 30/12/2011 d 22:20
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more