0

我正在使用上述方法为我的应用程序创建类似于退出对话框的东西。代码工作得很好,但警告对话框只在屏幕上停留不到一秒钟。然后它消失了,应用程序在没有遵循我的指示的情况下关闭。我不知道为什么会这样。

提前谢谢你。

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

2 回答 2

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()在 的onBackPressed()方法中调用 to 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;
        }
    }
};

如果您直接Activity扩展 AndroidActivity类(如 Aprian 评论的那样),它将导致您Activity正确“完成”。但是,如果您Activity扩展Activity了您自己的另一个覆盖onBackPressed(),则将执行正确的代码序列。

但是要注意的一件事是,如果您Fragments在后堆栈上,在这种情况下,调用onBackPressed()任何直接扩展 AndroidActivity类的东西可能只会导致顶部Fragment完成并从堆栈中弹出下一个。

于 2013-09-09T22:46:44.553 回答
0

删除super.onBackPressed();.

于 2013-09-09T03:56:46.943 回答