2

我使用以下方法通过向用户提示警报框来退出应用程序。
但我的申请要求 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();
    }
4

2 回答 2

7

这可能是几件事的结果:

  1. 您还覆盖了void onKeyDown(...)orvoid dispatchKeyEvent(...)onBackPressed();在那里调用

  2. 您已被覆盖void finish()
    ,并在那里调用第二个对话框

  3. 您的应用被实例化了 2 次
    (出于任何原因——查看您的代码?)

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

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

    从文档中:

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

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

于 2013-06-03T17:54:57.920 回答
0
//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();
        }

    }
于 2014-09-29T00:25:00.087 回答