Android 带有首选项的警报对话框

Android 带有首选项的警报对话框,android,Android,我正在做一个改变背景颜色的应用程序,但我现在想做的是使用alertDialog,我的问题是,当我改变屏幕时,它没有保存上次的更改,它再次出现alertDialog。我正在使用这个,但我不知道我是否做得正确。。。我使用getPreferences是因为我需要获取我的活动默认SharedReferences // SharedPreferences preferences = getPreferences(MODE_PRIVATE); // int storedPrefe

我正在做一个改变背景颜色的应用程序,但我现在想做的是使用alertDialog,我的问题是,当我改变屏幕时,它没有保存上次的更改,它再次出现alertDialog。我正在使用这个,但我不知道我是否做得正确。。。我使用getPreferences是因为我需要获取我的活动默认SharedReferences

//        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
//        int storedPreference = preferences.getInt("storedInt", 0);
//        SharedPreferences.Editor editor = preferences.edit();
//        editor.putInt("storedInt", storedPreference);
//        editor.commit();

        new AlertDialog.Builder(this)
        .setTitle("Alert Dialog")
        .setMessage("Startup Button Visibility:")
        .setPositiveButton("Hidden", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                if(buttonVisible == true)
                {
                    myLayout2.setVisibility(View.INVISIBLE);
                }
                else
                    myLayout2.setVisibility(View.VISIBLE);
//              Toast.makeText(getApplicationContext(), "Hidden was clicked", Toast.LENGTH_LONG).show();
//                // continue with delete
            }
         })

        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                // do nothing
            }
         })

         .setNeutralButton("Visible", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub  
            }
         })

         /**
          * Showing alert dialog
          */

        .show();

根据你对问题的评论。看起来您希望保留活动的状态,即使您更改了活动的方向。将其添加到活动括号内的清单中

android:configChanges="orientation|screenSize"

更改方向会重新创建活动。

问题在于每次调用创建时更改方向,但可以通过在活动标记的AndroidManifest文件中添加活动的configChanges属性来避免重新创建活动


android:configChanges=keyboardHidden | orientation

当发生以下事件后更改屏幕方向时

==方向改变===

onSaveInstanceState->onPause->onStop->onCreate->onStart->onRestoreInstanceState->onResume

因此,当您想要保存状态时,可以使用onSaveInstanceState。通常在onCreate中恢复状态

为了恢复这一点:

public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getString("param");
  }
}

因此,您可以保存颜色值或任何您想要的内容,并在onCreate中还原这些内容,并设置为您的AlertDialog。

您到底想要什么?为什么你第一次隐藏并在没有任何改变的情况下再次设置?我已经做了一个应用程序,在你按下按钮后改变背景颜色,点击屏幕也可以显示和消失按钮,现在我使用alertDialog启动可见模式,隐藏按钮或取消,但我的问题出现在我按下后,例如:隐藏,它工作,但如果我更改方向,alertDialog将再次出现:/如果您更改设备的方向,您将再次重新创建活动。您可以使用一个变量来说明对话框是否以您想要的方式结束,并使用onsaveInstanceState保存该变量,然后在onRestoreInstance中恢复该变量,或者使用Bundle类在onCreate中恢复该变量,前提是您的变量已在Bundle中使用先前定义的值进行了定义,那么你就不会显示对话框了。你看过对话框片段了吗?这就是使用对话框的方法。构建对话框需要做更多的工作,但可以为布局更改节省一些麻烦。看,是的,这就是我想要做的,但我需要在SaveInstance上使用,问题是什么?你看到任何错误了吗?没有,没有错误,只是当我更改方向时,alertdialog再次出现,这是我的问题。更改方向时你想要什么?在我选择了一个选项(例如:隐藏按钮)后,如果我更改方向,它假定不必再次出现alertdialog,这个窗口必须在我启动应用程序时出现,每次我旋转它都会显示这个窗口让我们
public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getString("param");
  }
}