onBackPressed方法显示不到一秒钟

时间:2013-09-09 00:56:59

标签: android

我正在使用上面的方法为我的应用程序创建类似退出对话框的内容。代码工作得很好但警报对话框只在屏幕上停留不到一秒钟。然后它消失,应用程序关闭而不遵循我的指示。我不知道为什么会这样。

提前谢谢你。

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

      DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
            case DialogInterface.BUTTON_POSITIVE:
                ganthem.stop();
                System.exit(0);
                break;

            case DialogInterface.BUTTON_NEGATIVE:

                dialog.cancel();

                break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Exit or not ?").setPositiveButton("Yes", dialogClickListener)
        .setNegativeButton("No", dialogClickListener).show();
    }

2 个答案:

答案 0 :(得分:1)

与删除super.onBackPressed()电话的建议相反,为了完整起见,我只建议移动电话。

Aprian对您原始问题的评论正确回答了为什么您只能在短时间内看到对话框并且应用程序正在关闭。

...然而

假设您有两个Activity类,例如......

public class ActivityA extends Activity {

    ...

    @Override
    public void onBackPressed() {
        // Do something
    }
}

public class ActivityB extends ActivityA {

    ...

    @Override
    public void onBackPressed() {
        // Do something
        super.onBackPressed();
    }
}

在这种情况下,您需要使用super.onBackPressed()的{​​{1}}方法拨打onBackPressed()

对于您的代码,您不清楚ActivityB扩展了什么,但我会更改代码如下...

Activity

如果您的DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case DialogInterface.BUTTON_POSITIVE: ganthem.stop(); MyActivity.this.onBackPressed(); break; case DialogInterface.BUTTON_NEGATIVE: dialog.cancel(); break; } } }; 直接扩展了Android Activity课程,那么(正如Aprian所评论的那样)会导致Activity正确完成“{1}}。但是,如果您的Activity扩展了自己的Activity覆盖Activity,则会执行正确的代码序列。

要注意的一件事是,如果你在后台堆栈上有onBackPressed(),在这种情况下,在任何直接扩展Android Fragments类的内容上调用onBackPressed()可能只会导致顶层Activity完成,下一个从堆栈中弹出。

答案 1 :(得分:0)

删除super.onBackPressed();