为什么在多标签活动中没有检测到后退按钮?

时间:2011-06-16 06:40:28

标签: android android-intent android-tabhost

我有主要活动。这有4个标签(TabHost)。我在MainActvity中重写了onBackPress()以及所有4个活动。此按钮向用户显示一个对话框并确认退出 当应用程序启动时它显示第一个选项卡。然后,如果我按回来它工作正常。但是,如果我选择下一个3选项卡,然后按回来,应用程序停止。主叫OnDestroy()。但是没有用户的对话。即使是在日志猫中打印。我用onBackPressed()方法编写了5个活动,包括MainActivity

我还试用onKeyDown()作为后退键但结果是一样的吗?有任何一次经历吗?请帮帮我。

3 个答案:

答案 0 :(得分:1)

我发现当我使用TabHost时,很难在之前的标签页面中打开新活动。我谷歌它,发现GroupActivity是这个问题的最佳解决方案。 GroupActvity Example 但是,在上一个选项卡中打开新活动时,GroupActivity会遇到同样的问题。后退按钮不适用于新活动。搜索后我发现这是由于焦点是alwasys对父母的活动。我必须做

  

setFocusable(真);   requestFocus()方法;

在我的新活动组件上获得焦点。

我现在正在使用GroupActivity来自定义Tabbar和活动。我还在父活动中维护堆栈的活动ID,以便在用户按下后退按钮时弹出最近的活动。

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

onBackPressed() not working inside ActivityGroup

答案 1 :(得分:0)

我确定知道的一件事是,如果您使用tabHost而不是在子视图中运行,您将始终获得在MainActity中调用的onBackPressed()。我想到的唯一事情就是你在onBackPressed方法中消耗了这个事件(返回true),因为如果你没有这样做,它会继续按照默认进程并破坏你的活动。

答案 2 :(得分:0)

我遇到了这个问题,但我现在已经开枪了。     @覆盖     public boolean onKeyDown(int keyCode,KeyEvent event)     {        if(keyCode == 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()