gpt4 book ai didi

android - 再次选择当前选项卡时收到通知

转载 作者:IT老高 更新时间:2023-10-28 23:34:08 24 4
gpt4 key购买 nike

我实现了一个 TabActivity,它实现了 OnTabChangeListener。Activity 将在选项卡更改时收到通知 (onTabChanged(String tabId))。

如果用户再次选择当前选项卡,是否也可以获得通知?

我想使用此事件来执行当前选项卡内容的“刷新”,而不是在选项卡或选项菜单中提供刷新按钮。


这就是我最终解决问题的方式 - 解决方案提示在 MisterSquonk 答案中。

(1) 定义一个 OnTabReselectListener,它必须由一个代表选项卡内容的 Activity 实现,并在重新选择事件时得到通知。

/**
* 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) 为 TabActivity 的 onCreate() 中的每个 tabWidget 子级设置 OnTouchListener(来自 MisterSquonk 的回答)

for (int i = 0; i < tabWidget.getChildCount(); i++) {
View v = tabWidget.getChildAt(i);
v.setOnTouchListener(this);
}

(3) 在 TabActivity 中实现 OnTouchListener.onTouch()。执行一些逻辑来确定当前选项卡是否再次被选中并通知选项卡的 Activity 。

/**
* @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;
}

最佳答案

您可以通过让 TabActivity 实现 View.onTouchListener 并为每个选项卡调用 setOnTouchListener 来实现此功能...

for (int i = 0; i < tabWidget.getChildCount(); i++) {
View v = tabWidget.getChildAt(i);
v.setOnTouchListener(this);
}

然后在您的 Activity 中覆盖 onTouch()...

@Override
public boolean onTouch(View v, MotionEvent event) {

// Not sure what to do here to identify each tab

return false;
}

从上面的评论可以看出,我不确定如何处理onTouch监听器中的View(v参数)来识别哪个Tab被触摸了。

我可以确认,无论您触摸当前选择的标签还是未选择的标签,它都会触发,并且不会干扰更改标签。

希望对你有帮助。

关于android - 再次选择当前选项卡时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com