片段被销毁和创建时如何保持按钮状态相同?

时间:2017-12-17 12:09:26

标签: java android android-fragments sharedpreferences

我在片段中有一个名为homeFragment的按钮,它有一个带滑块开关的活动。现在我在片段的onCreateView中初始化了开关,如下所示:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View RootView = inflater.inflate(R.layout.fragment_home, container, false);
        protectionSwitch = (Switch)RootView.findViewById(R.id.main_switch_protection);

现在我想将交换机的状态存储在SharedPreferences值中。但我存储了这样的值:

isEnabledState = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = isEnabledState.edit();
    editor.putBoolean(ENABLEDGETKEY, true);
    editor.apply();
Boolean isEnabled = true;

现在我试图在片段被破坏后再次启动应用程序时恢复此值,并在onCreateView中恢复这样的开关位置:

SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences(ENABLEDGETKEY, Context.MODE_PRIVATE);
    isEnabled = sharedPreferences.getBoolean(ENABLEDGETKEY, false);
    if (isEnabled) {
        protectionSwitch.setChecked(true);
    }
    else {
        protectionSwitch.setChecked(false);
    }

但这不起作用。相反,我只是让按钮保持在禁用状态。

即使片段被销毁并再次启动,我还能做些什么来保持开关位置不变?

1 个答案:

答案 0 :(得分:0)

好的,我在下面的代码中修复了它,但首先这是你应该使用的逻辑:

  • 要访问SharedPreferences,您必须注意以相同的方式声明和检索它。这是我出错的地方。

这是代码,用于声明它:

SharedPreferences isEnabledState = YourFragment.this.getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = isEnabledState.edit();
    editor.putBoolean(ENABLEDGETKEY, false);
    editor.apply();

这就是你检索它的方式:

    SharedPreferences isEnabledState = YourFragment.this.getActivity().getPreferences(Context.MODE_PRIVATE);
Boolean isEnabled = isEnabledState.getBoolean("yourkey", false);

我将此保存为Fragment中的局部变量,使用交换机中的 isEnabled ,布尔值保存启用状态。现在在 onCreate (本地Bool)中检查这一点,然后在您的开关上使用setChecked并将其设置为布尔值。

我希望这对某人有所帮助,因为我不希望他们像我这样浪费一天! (开玩笑!)