2011-06-16 47 views
1

我有主要活动。这有4个选项卡(TabHost)。我在MainActvity中覆盖了onBackPress(),以及所有4个活动。此按钮显示用户对话框,并确认退出 当应用程序启动。它显示第一个选项卡。然后,如果我按回它工作正常。但是如果我选择下一个3选项卡然后按回,应用程序将停止。 Main的OnDestroy()被称为。但没有用户的对话。即使注意到是在日志猫打印。我已经在onBackPressed()方法中写入了包括MainActivity在内的5项活动。为什么后退按钮在多选项卡活动中未检测到?

我也尝试onKeyDown()作为后退键,但结果是一样的吗?有任何一个经验相同吗?请帮帮我。

+0

向我们展示你的代码** **简单对不起 – Blundell 2011-06-16 08:55:58

+0

,我现在已经使用GroupActivity为定制标签的一个简单的例子。谢谢。现在它的工作很完美。 – Arslan 2011-07-28 06:08:15

+1

你不应该只是说'哦,现在它的工作再见'你应该解释你的决定在一个答案也许有一些代码或链接太你改变为你的推理。 1)然后,您可以将此标记为正确的答案,并保持您的统计数据。2)如果其他人与此问题相关,他们将带领您遵循 – Blundell 2011-07-28 08:52:04

回答

1

我开始知道当我使用TabHost时很难在以前的选项卡中打开新的活动。我谷歌,发现GroupActivity是这个问题的最佳解决方案。 GroupActvity Example 但是,在上一个选项卡中打开新活动时,GroupActivity具有相同的问题。后退按钮无法正常工作以进行新的活动。搜索后,我发现这是由于重点是alwasys对父母的活动。我必须制作

setFocusable(true); requestFocus();

关于我的新活动组件获得关注。

我现在使用GroupActivity来自定义Tabbar和activities.As我也可以在父活动中维护活动id的堆栈,以便当用户按下后退按钮时可以弹出最近的活动。

否则,如果你不打算实现活动焦点,那么你应该在父母保持堆栈,当按下后退按钮时,它会启动父母onBackPressed();并且您可以按照链接中的讨论调用child的onPackPressed()功能。

onBackPressed() not working inside ActivityGroup

0

当然,我知道的一件事是,如果您使用tabHost运行并且不在子视图中,您将始终获得MainActity中调用的onBackPressed()。唯一想到的是,如果你已经在onBackPressed方法中使用了事件(返回true),因为如果你没有执行它,它将继续并继续遵循默认过程并销毁你的活动。

+0

感谢您的时间。但应该有一些日志打印...说。 后退按钮被按下。我正在参加ABC活动。 但我没有得到这个。但只有那个日志是“我正在摧毁”孩子的活动和父母的活动。 – Arslan 2011-06-16 08:37:11

+1

好吧,我已经在我的许多应用程序中完成了这项任务,正如我所说的,选项卡活动将始终处理关键事件,菜单项也一样。所以除非你做的事很奇怪,那么后面的媒体将会被注册。没有一些代码和结构我不能提供任何更多的信息。但您的注意力集中在标签活动以注册密钥。也许尝试重写1(第一个选项卡活动将返回true,一旦返回false),然后注释掉标签活动,如果这不起作用,并尝试为孩子。然后试验回报。 – DArkO 2011-06-16 11:23:01

0

我遇到这个问题,但我现在已经出手吧。 @Override 公共布尔的onkeydown(INT的keyCode,KeyEvent的事件) { 如果(键代码== KeyEvent.KEYCODE_BACK) { showExitDialog(); 返回true; }
return super.onKeyDown(keyCode,event); }

public void showExitDialog() 
{ 
    new AlertDialog.Builder(this) 
    .setTitle("Attention") 
    .setMessage("Do you want to exit this application") 
    .setPositiveButton("YES", exitListener) 
    .setNegativeButton("No", cancelListener) 
    .show(); 
} 
at the first time i lost a "reture true" in onkeydown()