2012-04-02 6 views
1

В приложении, над которым я работаю, мне нужно создать контекстное меню, если пользователь выполнит longClick на вкладке, что позволит им закрыть вкладку. Кажется, я не могу найти способ добавить слушателя к вкладке. Мне нужна каждая вкладка, чтобы иметь свой собственный слушатель, или слушатель должен быть в состоянии сказать, на какой вкладке был выполнен длительный клик, поскольку он не всегда будет активной вкладкой.Добавить onLongClickListener на вкладку TabHost android

Любые идеи?

+0

Вы имеете в виду длительное нажатие в любом месте вкладки или только на вкладке вкладки внутри TabHost? –

+0

Как раз на кнопке на TabHost было бы лучше, но если это невозможно, то где-нибудь на вкладке будет выполнимо. – nick

ответ

1

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

Если вам не нужно обрабатывать все эти вещи самостоятельно (например, для оформления пользовательского контекстного меню), проще всего использовать то, что находится в buck-in, до Activity.

+0

Это было очень просто. Если бы я думал искать что-то подобное, это спасло бы мне много времени и усилий. Теперь я знаю много способов не делать этого и один из способов сделать это. Спасибо – nick

+0

@nick: Рад помочь. Вы могли бы подумать, что что-то настолько простое сделать, будет более очевидным, но я должен признать, что мне потребовалось некоторое время, чтобы разобраться, когда я впервые начал использовать вкладки. Ну стоит усилий, хотя. – Squonk

1

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

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

+0

Это имеет смысл, я смотрел в классе TabHost.TabSpec, который наследуется от Object, но я решил, что должен быть какой-то способ его получить. Спасибо – nick

Смежные вопросы