Как реализовать контекстное меню, вызываемое долгим щелчком или касанием ListActivity, использующего встроенные макеты и ListAdapter?
Как реализовать контекстное меню в ListActivity на Android?
Ответы (2)
В методе onCreate вызовите registerForContextMenu нравится:
registerForContextMenu(getListView());
а затем заполните меню на onCreateContextMenu (меню ContextMenu, представление 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 и этот факт не объясняется явно в документации, за исключением того, что вы используете другой метод для получения вызовов из контекстного меню; просто имейте в виду, не делитесь идентификаторами.
В 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);
registerForContextMenu
только один раз: да. Но с настраиваемым макетом списка действий у вас могут быть и другие элементы для регистрации. Но тогда: не лучше ли использовать instanceof
и проверить, что у вас есть? - Ааа, хорошего демонстрационного кода я никогда не видел.
- person Martin; 05.06.2011
Вам также следует взглянуть на Activity.registerForContextMenu (Просмотр).