【问题标题】:Dialog is not closed dialog.dismiss() when navigating backand forth to settings screen来回导航到设置屏幕时对话框未关闭 dialog.dismiss()
【发布时间】:2014-12-20 07:01:54
【问题描述】:

发生了什么::

  1. 弹出对话框
  2. 我点击确定 -> 它引导我进入设置屏幕
  3. 现在我按下返回键
  4. 当我回来时对话框按钮仍然存在
  5. 我再次点击确定
  6. 它再次引导我进入设置屏幕
  7. 如此重复,对话框永远不会关闭

我想做什么:

  1. 弹出对话框
  2. 我点击确定 -> 它引导我进入设置屏幕
  3. 现在我按下返回键
  4. 当我回来时对话框按钮应该已经关闭

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        createInstances();
        //set up notitle 
        requestWindowFeature(Window.FEATURE_NO_TITLE);  
        //set up full screen
         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);  
        setContentView(R.layout.main_splash_screen);
    }



    @Override
    protected void onStart() {
        super.onStart();
        open(getResources().getString(R.string.location_not_enabled));
    }

   public void open(String custMsg){

        AlertDialog.Builder alert = new AlertDialog.Builder(this);
        alert.setMessage(custMsg);
        alert.setCancelable(false);
        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                locationValidationDone=true;
                dialog.dismiss();
                startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        });
        alert.show();
    }

【问题讨论】:

  • 尝试添加final AlertDialog dialog = builder.create();并在确定点击中关闭dialog
  • @shayanpourvatan ...这个dosent工作.....解决这个要求的唯一方法是按照prakash的建议将它放在oncreate中

标签: android android-dialog


【解决方案1】:

对话框用在onstart()请用oncreate(),

当你回到你的活动时,它被称为onstart()onresume()

请阅读activity lifecyclelifecycle

@Override
protected void onStart() {
    super.onStart();

    if(!start_dialog)
    {
        start_dialog = true;
        open(getResources().getString(R.string.location_not_enabled));
    }
}

【讨论】:

  • 所以这个特殊的验证必须在 oncreate 本身上完成? ...在 onstart() 中没有办法吗?
  • 如果你想在 onstart() 中使用,设置标志并重置
【解决方案2】:

在确定按钮代码中而不是

dialog.dismiss();

使用它

alert.dismiss();

【讨论】:

  • AlertDialog.Builder 没有 dismiss 方法
  • @hanish sharma ......我没有对答案投反对票,但是......正如 OneWay 所说的那样是正确的!
  • 没关系,但它对我有用,只需使用 alert.dismiss();而不是 dialog.dismiss();
  • @hanishsharma .... 我仍然同意 oneWay 的评论 ...但是这个dosent工作.....解决这个要求的唯一方法是按照 prakash 的建议将它放在 oncreate 中
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2021-08-23
  • 2013-11-08
  • 2012-09-24
  • 2021-11-02
  • 2019-02-22
  • 2012-05-19
相关资源
最近更新 更多