【问题标题】:Why are my CheckBoxe's state never saved?为什么我的 CheckBoxes 状态从未保存?
【发布时间】:2015-07-12 22:06:06
【问题描述】:

我的Fragments 之一中有几个CheckBox 元素。

每次我离开这个片段时,似乎也没有保存或恢复用户提供的每个片段的选中状态。

FragmentList 示例中,您可以找到:

CheckBox check1;
boolean active;
@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("state1", check1.isChecked());
    }

以后可以这样使用:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
            // Restore last state for checked position.
            check1.setChecked(savedInstanceState.getBoolean("state1"));
        }
}

但不知何故,CheckBox 元素并没有保存它们的状态。

这是我应该采取的正确方法吗?

【问题讨论】:

  • 使用onRestoreInstanceState()恢复保存状态。
  • 仍然没有保存 CheckBox 状态。
  • 在里面设置了一个 Toast 之后,我可以注意到它们实际上从未被调用过。

标签: android android-fragments checkbox


【解决方案1】:

除非您在应用程序的整个生命周期中保持 Fragment 引用处于活动状态,否则将其状态保存在 onSaveInstanceState 并将其恢复到 onActivityCreated 应该没问题。

不过,重要的一点是通过以下操作在Activity 级别保存和恢复该状态:

public void onCreate(Bundle savedInstanceState) {
    ...
    if (savedInstanceState != null) {
        // Restore the fragment's instance
        mFragment = getSupportFragmentManager().getFragment(
                savedInstanceState, "fragKey");
        ...
    }
    ...
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // Save the fragment's instance
    getSupportFragmentManager().putFragment(outState, "fragKey", mContent);
}

请检查您的Activity 在您的场景中的表现。

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2018-10-13
    • 2017-04-07
    • 2013-07-02
    • 2011-05-05
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多