退出应用程序确认对话框出现多次

时间:2014-11-10 07:10:25

标签: android android-alertdialog

我有一个主要有两个页面的应用程序,主要是第二个。

我正在从主要经历到第二经历和副经理。

MainActivity.java包含以下代码:

Button btnSecond = (Button) findViewById(R.id.btnSecond);

    btnSecond .setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent j = new Intent(MainActivity.this,Second.class);
            startActivity(j);
        }
    });

Second.java包含以下代码:

Button btnClose = (Button) findViewById(R.id.btnClose);

        btnClose .setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent j = new Intent(Second.this,MainActivity.class);
                startActivity(j);
            }
        });

我已在MainActivity.java

中添加了应用退出确认对话框功能
@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this)
        .setMessage("Are you sure you want to exit?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                MainActivity.this.finish();
            }
        })
        .setNegativeButton("No", null)
        .show();
    }

问题是,当我从第二页到主页然后按设备上的后退按钮时,我会收到警报两次。

就我的理解而言,这是因为MainActivity在后台加载了两次:一次是当我点击主页面上的第二个按钮并遍历到第二个屏幕时,第二个是当我点击关闭按钮时第二页并遍历到主页面。

我想要的是应该有一个确认对话框并点击是应该关闭主要活动,即使它被多次加载。

4 个答案:

答案 0 :(得分:1)

您不应该再次呼叫第一个活动,您可以在第二个活动上调用完成。我想这会解决你的问题。

Button btnClose = (Button) findViewById(R.id.btnClose);

        btnClose .setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Second.this.finish();
            }
        });

on mainactivity。

  @Override
    public void onBackPressed() {
        new AlertDialog.Builder(this)
        .setMessage("Are you sure you want to exit?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                MainActivity.this.finish();
                super.onBackPressed();
            }
        })
        .setNegativeButton("No", null)
        .show();
    }

答案 1 :(得分:0)

首先,当您拨打第二个活动时使用:

btnSecond .setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent j = new Intent(MainActivity.this,Second.class);
        j.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(j);
    }
});

您必须致电super.onBackPressed();

@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
    .setMessage("Are you sure you want to exit?")
    .setCancelable(false)
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            MainActivity.this.finish();
            super.onBackPressed();
        }
    })
    .setNegativeButton("No", null)
    .show();
}

答案 2 :(得分:0)

开始第二个活动时,只需致电finish()

Intent j = new Intent(MainActivity.this,Second.class);
startActivity(j);
finish();

这将解决您的问题。

答案 3 :(得分:0)

请在第二个活动按钮点击监听器中更改代码

`Button btnClose =(Button)findViewById(R.id.btnClose);

    btnClose .setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });`

你的问题已经解决了。

finish()函数可以杀死你的活动。

请检查。