Добавить onLongClickListener для вкладки на TabHost Android - PullRequest
1 голос
/ 03 апреля 2012

В приложении, над которым я работаю, мне нужно контекстное меню, которое отображается, если пользователь выполняет длинный щелчок на вкладке, который позволит им закрыть вкладку. Я не могу найти способ добавить слушателя на вкладку, хотя. Мне нужно, чтобы у каждой вкладки был свой слушатель, или у слушателя должна быть возможность определить, на какой вкладке выполнялся longClick, поскольку она не всегда будет активной вкладкой.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Я ценю, что ответ принят, но если вы хотите использовать встроенные возможности 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.

1 голос
/ 03 апреля 2012

A TabWidget - это вид, как и любой другой; вы должны иметь возможность зарегистрировать OnLongClickListener с помощью myTabWidget.setOnClickListener и использовать аргумент View OnLongClickListener.onLongClick(View v), чтобы определить, какая вкладка была нажата.

Когда вы используете TabSpec для регистрации индикатора для каждой вкладки в вашем TabHost, если у ресурса, который вы передаете, есть связанный идентификатор, вы сможете использовать этот идентификатор для поиска самой вкладки. Это может означать, что вам, возможно, придется начать использовать View s или макеты в качестве аргументов TabSpec.setContent или TabSpec.setIndicator (если вы этого еще не сделали), чтобы вы могли искать их по идентификатору позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...