2011-11-29 56 views
2

假设有A,B,C,d和E等活动。我创建的活动中E.主页按钮,如果我现在从活动转会到B,然后到C和最后到D.如何完成对主页按钮的点击所有活动

现在,当我点击主页按钮,当我在d的活动,我想完成我所有的其他活动。

这样当用户再次启动该应用程序也不会打开d活动。相反,它会从第一个活动即A开始。那么如何做到这一点。请建议我。

问候 Anshuman

回答

9

在活动d,你只需要定义一个FLAG_ACTIVITY_CLAR_TOP标志,同时限定意图开始首页动态A.

例如:

public void btnHomeClick(View v) { 
     Intent intent = new Intent(this, HomeActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
    } 
+1

好的答案!!!谢谢 –

+0

+1很高兴这个答案对你有帮助!感谢名单 –

0

首先我们不能覆盖android中的“home”按钮(即硬件按钮)。

+0

没有写清楚的问题: –

+0

“我在动鄂创建一个home键”我想,而不是使用另一个按钮,如果我写的onPause()活动d的代码..那么它的工作原理 – AndroidDev

+0

@Anshuman你是否在使用带操作栏设计模式的仪表板?如果是,那么你只需要把“家”按钮放在顶部的酒吧。并在该主页按钮单击事件中写入上面的代码 –

1

你可以在你的home键的使用onclick System.exit(0);

1

完成对为homeButton发稿所有活动的最好方法如下所述:

如果您需要支持仅API级别16+(安卓4.1/JELLY_BEAN及以上) finishAffinity();完成当前的活动在其中被调用以及当前任务中紧邻其下的具有相同关联性的所有活动。

要调用finishAffinity();家用按下按钮时,您可以听下面的主页按钮按下事件:

键代码常数:public static final int KEYCODE_HOME;这个键是由框架处理,并且永远不会传递给应用程序。因此,您需要在您的活动中覆盖以下方法。

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);   
} 

覆盖上述方法后,现在您可以使用onKeyDown()方法轻松地在您的活动中监听HOME键。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {  

    if(keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     //The Code Want to Perform. 
    } 
}); 

完成所有活动前API级别16(搭载Android 4.1之前/果冻豆),你必须追踪所有活动中的筹码,并通过将Home键按下呼叫finish();为所有这些事件返回到以前的调用活动(并且不,无法在Activity堆栈中迭代,因此您必须使用startActivityForResult()和OnActivityResult())自己管理所有这些。

不要使用System.exit(0);因为它,如果你有在堆栈上一个以上活动不杀你的应用程序。实际发生的情况是该进程被终止并立即重新启动,并且在堆栈上的活动较少。当您的应用程序被强制关闭对话框杀死时,或者甚至当您尝试从DDMS中终止进程时,也会发生这种情况。就我所知,这是一个完全没有记录的事实。