我的活动流程看起来像这样
compositionComplete (gets called here too, when a route is first visited)
attached
compositionComplete
单击C中的按钮时,它将打算使用A.
当按下A中的后退按钮两次时,它应关闭应用程序。
LogIn Activity-> Activity A(Main Page)->Activity B-> Activity C
问题:
当我按下按钮一次时,它会显示
boolean doubleBackToExitPressedOnce = false; public void onBackPressed(){ if(doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this.doubleBackToExitPressedOnce = true; Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { doubleBackToExitPressedOnce = false; Intent a = new Intent(Intent.ACTION_MAIN); // close app code a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } },2000);
,然后它会自动关闭应用程序,即使我 没两次点击按钮。如果我单击按钮两次,它将返回LogIn Activity。什么是 正确的写作方式?感谢
修改
如果我删除Please click BACK
again to exit
intent
双击后退按钮时,它将再次返回活动C.
答案 0 :(得分:1)
也许只需使用long lastTimePressed=0L;
并在其中存储System.currentTimeMillis();
和if(System.currentTimeMillis()-lastTimePressed>2000) finish();
2000表示Toast.Length_SHORT
,3500表示Toast.LENGTH_LONG
long lastTimePressed=0L;
@Override
public void onBackPressed (){
if(System.currentTimeMillis()-lastTimePressed>2000) //short Toast duration, now should be faded out
finish();
else
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
lastTimePressed=System.currentTimeMillis();
}
不要开始新的Activity
(或者可能?如果您已实施singleTask
或singleTop
或noHistory
,但我对此表示怀疑。 finish();
和super.onBackPressed();
执行相同的操作。覆盖onBackPressed
的可能性稍后会在API5中添加,因为它非常有用:)
startActivity
开始您的活动,但使用startActivityForResult
。同时实施onActivityResult
(check out here)。当你使用
private static final int MY_RESULT_IS_KILL_MY_APP=4573; //random
setResult(MY_RESULT_IS_KILL_MY_APP);
finish();
下面的和Activity
会在自己的onActivityResult
中收到它,也应该设置此结果并调用finish();
。这样,活动堆栈就会被清除,整个Application都会退出。如果不设置此静态结果,finish();
将仅完成当前Activity
答案 1 :(得分:0)
完成LogIn活动在打开活动A.之前就是它。
new
答案 2 :(得分:0)
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}