Я реализовал TabActivity
, который реализует OnTabChangeListener
.
Эта активность будет уведомлена об изменениях вкладок (onTabChanged(String tabId)
).
Можно ли также получать уведомление, если пользователь снова выбирает текущую вкладку?
Я хотел бы использовать это событие для выполнения "обновления" текущего содержимого вкладки вместо того, чтобы предоставлять кнопку обновления на вкладке или в меню параметров.
То, как я, наконец, решил проблему - подсказка решения была в ответе MisterSquonk.
(1) Определите OnTabReselectListener, который должен быть реализован с помощью действия, которое представляет собой содержимое вкладки и которое будет уведомлено о повторном выборе событий.
/**
* Interface definition for a callback to be invoked when a current selected tab
* in a TabHost is selected again.
*/
public interface OnTabReselectListener {
/**
* Called when a current visible tab is selected again. Will not be invoked
* on tab changes.
*/
void onTabReselect();
}
(2) setOnTouchListener для каждого дочернего элемента tabWidget в onCreate() из TabActivity (из ответа MisterSquonk)
for (int i = 0; i < tabWidget.getChildCount(); i++) {
View v = tabWidget.getChildAt(i);
v.setOnTouchListener(this);
}
(3) Внесите OnTouchListener.onTouch() в TabActivity. Выполните некоторую логику, чтобы решить, была ли выбрана текущая вкладка и не указана активность вкладок.
/**
* @see android.view.View.OnTouchListener#onTouch(android.view.View,
* android.view.MotionEvent)
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean consumed = false;
// use getTabHost().getCurrentTabView to decide if the current tab is
// touched again
if (event.getAction() == MotionEvent.ACTION_DOWN
&& v.equals(getTabHost().getCurrentTabView())) {
// use getTabHost().getCurrentView() to get a handle to the view
// which is displayed in the tab - and to get this views context
View currentView = getTabHost().getCurrentView();
Context currentViewContext = currentView.getContext();
if (currentViewContext instanceof OnTabReselectListener) {
OnTabReselectListener listener = (OnTabReselectListener) currentViewContext;
listener.onTabReselect();
consumed = true;
}
}
return consumed;
}