应用程序使用onBackPressed()请求两次退出



我使用以下方法通过提示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();
    }

这可能是以下几个原因造成的:

  1. 您也覆盖了void onKeyDown(...)void dispatchKeyEvent(...)并调用onBackPressed();

  2. 您已覆盖void finish()
    然后调用第二个对话框

  3. 你的应用实例化了2次

  4. 你打开你的活动与意图有意两次,然后我有一个修复这里:)
    用下面的代码替换你的代码来打开它:

    Intent intent = new Intent(this, yourSubActivityClass.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    

    来自文档:

    如果设置了,并且正在启动的activity已经在当前任务中运行,那么不是启动该activity的新实例,它上面的所有其他activity将被关闭,并且这个Intent将作为一个新Intent传递给(现在在顶部的)旧activity。

  5. 如果其中一些对你有帮助,请在评论中告诉我
    否则发布更多的代码,我会尽量帮助你更多;)

//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();
        }
    }

最新更新