我实施了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为TabActivity的每个tabWidget孩子的onCreate()(从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;
}
你用什么来设置标签的指标? – Squonk 2011-03-30 15:48:56
@MisterSquonk我正在使用一个字符串。看我的编辑。 – FrVaBe 2011-03-30 16:53:56
看到我的答案可能的角度来探索。 – Squonk 2011-03-30 22:10:38