DialogInterface.dismiss()在后跟startActivity(Intent)时不起作用

时间:2015-02-03 18:04:48

标签: android alertdialog

我的Andorid应用程序每次恢复时都会检查位置服务设置,然后向用户显示弹出窗口,以便在禁用时启用它。这是代码:

AlertDialog.Builder dialog = new AlertDialog.Builder(context,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
dialog.setCancelable(false);
dialog.setTitle("Location Services Disabled");
dialog.setMessage("This app needs location services to be enabled. We recommend to keep it on");
dialog.setPositiveButton("Enable", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
        //paramDialogInterface.cancel();
        paramDialogInterface.dismiss();
        Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS );
        context.startActivity(myIntent);
    }
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
        finish();
    }
});
dialog.show();

问题:

  • 观察1:当用户点击“启用”按钮时,将启动“位置设置”。打开位置并按下后退按钮后,我的应用程序将恢复,但它不会隐藏对话框。
  • 观察2:我尝试评论startActivity行,然后使用相同的代码解散dilog。

3 个答案:

答案 0 :(得分:0)

提供完整的源代码。正在发生的对话被解雇,但在返回活动后,您再次显示对话框!检查你的状况!

答案 1 :(得分:0)

而不是'startActivity'您应该构建Intent并使用**startActivityForResult()**和“请求代码”

像这样。

 startActivityForResult(myIntent , YOUR_ENABLE_LOCATION_REQUEST_CODE);

然后在你的

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == YOUR_ENABLE_LOCATION_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user came back from the Enable Location Activity
            // Dismiss the Dialog
        } 
    }
}

请记住,如果您只想解除对话,即使用户没有启用它,您也可以随时拨打dialog.Dismiss();上的onActivityResult();

如果您需要有关如何使用此功能的更多信息,请始终参阅Android文档here

答案 2 :(得分:0)

您无需以编程方式关闭对话框,因为这是在处理对话框中单击按钮后的默认行为。

您很可能在 onResume onStart 方法中显示对话框。因此,无论何时调用其中一个生命周期方法(从“设置”返回时),都会显示对话框。如果是这种情况,那么最简单的解决方案是将这些代码移出这些生命周期方法并重构逻辑以显示对话框。