Java Android:如何永久设置可见性

Java Android:如何永久设置可见性,java,android,xml,android-studio,mobile,Java,Android,Xml,Android Studio,Mobile,这不是“如何设置可见性”问题的重复 我有一个活动1和一个活动2,当我启动活动2时,我在监听器中设置了一个布局,从Gone变为Visible,它可以工作,我的问题是,当我返回到活动1并返回到活动2时,布局的可见性又变为Gone。如何使布局在离开时保持可见 Activity2.java: @Override public void onClick(View v) { if (FirstLayout.getVisibility() == View.INVISIBLE) {

这不是“如何设置可见性”问题的重复

我有一个活动1和一个活动2,当我启动活动2时,我在监听器中设置了一个布局,从Gone变为Visible,它可以工作,我的问题是,当我返回到活动1并返回到活动2时,布局的可见性又变为Gone。如何使布局在离开时保持可见

Activity2.java:

@Override
 public void onClick(View v) {

        if (FirstLayout.getVisibility() == View.INVISIBLE) {
            FirstLayout.setVisibility(View.VISIBLE);
         }
}
SharedPreferences sharedPreferences;
Activity2.xml:

 <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:visibility="invisible"
      android:id="@+id/oneLayout"
      android:animateLayoutChanges="true"
      android:orientation="vertical">

      <!-- one Button -->
      <!-- one TextView -->   

  </LinearLayout>

您可以通过以下方法保存上次状态

boolean mState = false;
final String STATE_VISIBILITY = "state-visibility";

// somewhere in the code assign a value to mState 
// i.e. mState = false (if GONE default) and mState = true (if VISIBLE)

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putBoolean(STATE_VISIBILITY, mState);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}
恢复

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    mState = savedInstanceState.Boolean(STATE_VISIBILITY);
    view.setVisibility(mState?View.VISIBLE:View.GONE);

    }

有关

的更多信息,您可以通过以下方法保存上次状态

boolean mState = false;
final String STATE_VISIBILITY = "state-visibility";

// somewhere in the code assign a value to mState 
// i.e. mState = false (if GONE default) and mState = true (if VISIBLE)

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putBoolean(STATE_VISIBILITY, mState);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}
恢复

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    mState = savedInstanceState.Boolean(STATE_VISIBILITY);
    view.setVisibility(mState?View.VISIBLE:View.GONE);

    }

更多关于

的信息,如上述评论所述,请访问Activity2.java:

@Override
 public void onClick(View v) {

        if (FirstLayout.getVisibility() == View.INVISIBLE) {
            FirstLayout.setVisibility(View.VISIBLE);
         }
}
SharedPreferences sharedPreferences;
在Activity2的onCreate方法中:

 sharedPreferences=getPreferences(Context.MODE_PRIVATE);
 FirstLayout.setVisibility(sharedPreferences.getBoolean("visibility",false)); 
然后:

 @Override
    public void onClick(View v) {
    if (FirstLayout.getVisibility() == View.INVISIBLE) {
        FirstLayout.setVisibility(View.VISIBLE);
        SharedPreferences.Editor editor=sharedPreferences.edit();
        editor.putBoolean("visibility",true).commit();
     }
}

如上所述,在Activity2.java中:

@Override
 public void onClick(View v) {

        if (FirstLayout.getVisibility() == View.INVISIBLE) {
            FirstLayout.setVisibility(View.VISIBLE);
         }
}
SharedPreferences sharedPreferences;
在Activity2的onCreate方法中:

 sharedPreferences=getPreferences(Context.MODE_PRIVATE);
 FirstLayout.setVisibility(sharedPreferences.getBoolean("visibility",false)); 
然后:

 @Override
    public void onClick(View v) {
    if (FirstLayout.getVisibility() == View.INVISIBLE) {
        FirstLayout.setVisibility(View.VISIBLE);
        SharedPreferences.Editor editor=sharedPreferences.edit();
        editor.putBoolean("visibility",true).commit();
     }
}


在SharedPrefso中保存视图的可见性状态我想这是一个重复。My Apologiesset android:launchMode=“SingleTop”位于包含要隐藏的布局的活动元素内(在清单文件内),然后查看要隐藏的内容happens@Sam在清单中添加了它,但什么都没有发生,尽管当我将其更改为“singleTask”时,它意外地工作了,但启动活动的时间更长,动画也不同,速度也较慢,当我将其更改为“singleInstance”时,同样的事情发生了。“singleTask”和“singleInstance”到底是什么意思?@Sam好的,我只是阅读了有关它的文档,如果我关闭应用程序,它不会保存它。看来sharedPrefs是正确的选择,谢谢你在sharedPrefs中保存你的可视状态。我想这是一个重复。My Apologiesset android:launchMode=“SingleTop”位于包含要隐藏的布局的活动元素内(在清单文件内),然后查看要隐藏的内容happens@Sam在清单中添加了它,但什么都没有发生,尽管当我将其更改为“singleTask”时,它意外地工作了,但启动活动的时间更长,动画也不同,速度也较慢,当我将其更改为“singleInstance”时,同样的事情发生了。“singleTask”和“singleInstance”到底是什么意思?@Sam好的,我只是阅读了有关它的文档,如果我关闭应用程序,它不会保存它。看来sharedPrefs是正确的选择,谢谢。我如何定义状态可见性和mState?既然可见性值为0、1和2,它不应该是savedInstanceState.putInt()吗?请原谅这个不恰当的问题,如果你想保持两个以上的状态,你可以选择使用putInt。我想你希望保持可见或消失。是的,我实际上不需要两个以上的状态,但我如何创建STATE_VISIBILITY和mState?这些值将在将来由用户更改,我认为使用共享首选项是更好的解决方案,不是吗?此方法仅在活动转换期间保存最后一个状态。如果您想在应用程序首次启动时保存状态,共享Prefs是正确的方法。然后使用bryan c的方法。我如何定义状态可见性和mState?既然可见性值为0、1和2,它不应该是savedInstanceState.putInt()吗?请原谅这个不恰当的问题,如果你想保持两个以上的状态,你可以选择使用putInt。我想你希望保持可见或消失。是的,我实际上不需要两个以上的状态,但我如何创建STATE_VISIBILITY和mState?这些值将在将来由用户更改,我认为使用共享首选项是更好的解决方案,不是吗?此方法仅在活动转换期间保存最后一个状态。如果您想在应用程序首次启动时保存状态,共享Prefs是正确的方法。然后用布莱恩c的方法。这就是我要找的。我可以使用相同的SharedReferences来存储其他版面的可见性,但我必须创建一个新的编辑器来编辑每个关键点,对吗?不,你可以使用相同的编辑器,但你必须在任何时候调用comit(),只要你想保存更改。我认为当我卸载应用程序并再次运行它时,它并没有发挥应有的作用,布局在不应显示时已可见。我没有输入布尔值,而是输入Int,因为卸载应用程序时可见性为0、1或2,所有共享引用和数据都将被删除。问题是android备份服务,我建议您在应用程序开发期间通过将其添加到清单文件中来禁用它:android:allowBackup=“false”最好使用与应用程序版本相关的具有唯一名称的SharedReference。这就是我要找的。我可以使用相同的SharedReferences来存储其他版面的可见性,但我必须创建一个新的编辑器来编辑每个关键点,对吗?不,你可以使用相同的编辑器,但你必须在任何时候调用comit(),只要你想保存更改。我认为当我卸载应用程序并再次运行它时,它并没有发挥应有的作用,布局在不应显示时已可见。我没有输入布尔值,而是输入Int,因为卸载应用程序时可见性为0、1或2,所有共享引用和数据都将被删除。问题是android备份服务,我建议您在应用程序开发期间通过将其添加到清单文件中来禁用它:android:allowBackup=“false”最好使用与应用程序版本相关的具有唯一名称的SharedReference