Я ценю, что ответ принят, но если вы хотите использовать встроенные возможности ContextMenu
вместо установки onLongClickListeners
на самом TabWidget
, вы можете сделать это следующим образом ...
Например, мой текущий TabActivity
добавляет вкладки в цикле for
и, чтобы зарегистрировать каждую из них для контекстного меню, я делаю следующее.
for (int tabNumber = 1; tabNumber < 8; tabNumber++) {
...
spec = tabHost.newTabSpec(tag).setIndicator(indicator).setContent(intent);
tabHost.addTab(spec);
View v = tabWidget.getChildAt(tabNumber - 1);
registerForContextMenu(v);
...
}
Затем в моем Activity
я просто переопределяю onCreateContextMenu(...)
и onContextItemSelected (MenuItem item)
@Override
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenuInfo menuInfo) {
...
// The parameter v is the actual tab view and not the TabWidget
// this makes it easy to get the indicator text or its tag in order
// to easily identify which tab was long-clicked and build the menu
...
}
@Override
public boolean onContextItemSelected (MenuItem item) {
...
// Process selected item here
...
}
Нет необходимости явно указывать OnLongClickListener
для любых представлений, как это делается при вызове registerForContextMenu(...)
.Кроме того, обработка создания и выбора ContextMenu
полностью обрабатывается для вас методами ContextMenu
, предоставляемыми Activity
.
Если вам не нужно обрабатывать все эти вещи самостоятельно (для пользовательского макета контекстного меню)например) кажется проще просто использовать то, что встроено в Activity
.