Android:保存片段状态并恢复视图值

时间:2016-01-18 12:06:34

标签: android android-fragments

当一个片段被其他片段替换时,我想尝试保存片段的状态。 在我的活动中考虑我的 fragmentA textview-1 textview-2 。当我点击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 始终为空。

1 个答案:

答案 0 :(得分:-1)

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

Fragment中没有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