我使用以下方法通过提示alertbox给用户退出应用程序。
但是我的申请表要求离开2次。
@Override
public void onBackPressed()
{
new AlertDialog.Builder(this)
.setTitle("Closing Activity")
.setMessage("Are you sure you want to close this activity?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
这可能是以下几个原因造成的:
-
您也覆盖了
void onKeyDown(...)
或void dispatchKeyEvent(...)
并调用onBackPressed();
-
您已覆盖
void finish()
然后调用第二个对话框 -
你的应用实例化了2次
-
你打开你的活动与意图有意两次,然后我有一个修复这里:)
用下面的代码替换你的代码来打开它:Intent intent = new Intent(this, yourSubActivityClass.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
来自文档:
如果设置了,并且正在启动的activity已经在当前任务中运行,那么不是启动该activity的新实例,它上面的所有其他activity将被关闭,并且这个Intent将作为一个新Intent传递给(现在在顶部的)旧activity。
-
如果其中一些对你有帮助,请在评论中告诉我
否则发布更多的代码,我会尽量帮助你更多;)
//I use this :
public class MyActivity extends Activity
{
private int BackPressedCount=0; //press count
private void StartTimer()
{
TimerTask TT=new TimerTask()
{
@Override
public void run()
{
try
{
//if second press not detect in 1 second,reset and stop timer
BackPressedCount=0;
this.cancel();
}
catch(Exception E)
{
}
}
};
new Timer().scheduleAtFixedRate(TT, 1000, 1000);// init timer for 1 second period
}
@Override
public void onBackPressed()
{
//super.onBackPressed();
BackPressedCount++; //every press
if(BackPressedCount==1) // if first press detect run Timer (wait for second press)
StartTimer();
if(BackPressedCount==2) // if second press detect then finish
finish();
Toast.makeText(getBaseContext(),"Press again to exit" ,Toast.LENGTH_SHORT).show();
}
}