【问题标题】:Android : Save fragment state and restore the view valuesAndroid:保存片段状态并恢复视图值
【发布时间】:2016-01-18 12:06:33
【问题描述】:

嗨,当一个片段被另一个片段替换时,我正在尝试保存片段的状态。 考虑在我的活动中,我有一个带有 textview-1textview-2fragmentA。当我点击 textview-1 时,我 用具有列表视图的 fragmentB 替换 fragmentA。 现在,当我单击 fragmentB 列表项时,我正在获取列表值并更新 textview-1。我正在为 textview-2 做同样的事情,但是当我返回时, textview-1 的值消失了。如何保存片段 A 的状态及其 textview-1 值。

尝试如下

@Override
public void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
     outState.putString("curChoice", strtext);
}

在 OnActivityCreated() 中

 if (savedInstanceState != null) {
             // Restore last state for checked position.
             strtext = savedInstanceState.getString("curChoice", "");
             //incrementdata(strtext);
         }

savedInstanceState 总是给出 null。

【问题讨论】:

标签: android android-fragments


【解决方案1】:

当任何 Fragment 被系统销毁时,一切都将与 Activity 中的完全相同。这意味着每个成员变量也随着片段一起被销毁。您必须分别通过onSaveInstanceStateonActivityCreated 方法手动保存和恢复这些变量。

片段内没有onRestoreInstanceState 方法。 因此,您需要执行以下代码。

// These variable are destroyed along with Activity
private String var1,var2;

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("VAR1", var1);
    outState.putString("VAR2", var2);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    var1 = savedInstanceState.getInt("VAR1");
    var2 = savedInstanceState.getString("VAR2");
}

基本上每个标准小部件,例如EditTextTextViewCheckbox 等都已经在内部实现了这些东西。您可能需要为某些视图启用它,例如您必须将 android:freezeText 设置为 true 才能使 TextView 使用该功能。

【讨论】:

  • 嘿,我在做什么,请检查我的问题。
猜你喜欢
  • 2013-04-04
  • 2014-04-25
  • 2015-10-06
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多