我有主要活动。这有4个标签(TabHost
)。我在MainActvity中重写了onBackPress()
以及所有4个活动。此按钮向用户显示一个对话框并确认退出
当应用程序启动时它显示第一个选项卡。然后,如果我按回来它工作正常。但是,如果我选择下一个3选项卡,然后按回来,应用程序停止。主叫OnDestroy()
。但是没有用户的对话。即使是在日志猫中打印。我用onBackPressed()
方法编写了5个活动,包括MainActivity
。
我还试用onKeyDown()
作为后退键但结果是一样的吗?有任何一次经历吗?请帮帮我。
答案 0 :(得分:1)
我发现当我使用TabHost时,很难在之前的标签页面中打开新活动。我谷歌它,发现GroupActivity是这个问题的最佳解决方案。 GroupActvity Example 但是,在上一个选项卡中打开新活动时,GroupActivity会遇到同样的问题。后退按钮不适用于新活动。搜索后我发现这是由于焦点是alwasys对父母的活动。我必须做
setFocusable(真); requestFocus()方法;
在我的新活动组件上获得焦点。
我现在正在使用GroupActivity来自定义Tabbar和活动。我还在父活动中维护堆栈的活动ID,以便在用户按下后退按钮时弹出最近的活动。
否则,如果你不打算实现Activity焦点,那么你应该在父级中保持堆栈,当按下后退按钮时它将启动父onBackPressed();您可以按照链接中的讨论调用子onBackPressed()功能。
答案 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()