Android:按返回键退出应用程序

39

在我的应用中,我希望按下返回按钮时退出应用程序,这是我的代码:

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }).setNegativeButton("No", null).show();
    }

它的功能正常,但当我退出应用时,它不能完全退出,并显示一个带有我的应用标志的空白页面。当我再次按下返回按钮退出应用时,该怎么办?如何修复?

编辑:

我使用了这段代码,相比之前的代码,现在我的应用可以完全退出,但是我想它在后台运行并不完全退出,我该怎么做?

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                    }
                }).setNegativeButton("no", null).show();
    } 

你在这段代码上没有编译错误吗? - LightYearsBehind
13个回答

0
我找到了一个好的解决方案:
@Override
public void onBackPressed() {

    int idItem = navView.getSelectedItemId();
    if (R.id.navigation_home == idItem){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("do you want to go back sir?")
                .setCancelable(true)
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {
                        dialog.dismiss();
                        finish();
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, final int id) {

                        dialog.dismiss();

                    }
                });
        builder.create().show();
    }
    else{
        super.onBackPressed();  // this line make back action
    }

}

0

不要调用finish(),而是调用super.onBackPressed()


@Shasika:你说的不对,不能在一个方法内调用onBackPressed()方法!!! - Elham Gdz

-6

使用这个代码非常简单的解决方案

 @Override
    public void onBackPressed() {
      super.onBackPressed(); // this line close the  app on backpress
 }

3
覆盖某个方法并仅调用超类实现的目的是什么? - pskink
错误答案。除非这是根活动,否则super.onBackPressed()不会退出应用。而且,如果你只是调用super,为什么要覆盖? - Pang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接