我在片段中有一个名为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);
}
但这不起作用。相反,我只是让按钮保持在禁用状态。
即使片段被销毁并再次启动,我还能做些什么来保持开关位置不变?
答案 0 :(得分:0)
好的,我在下面的代码中修复了它,但首先这是你应该使用的逻辑:
这是代码,用于声明它:
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
并将其设置为布尔值。
我希望这对某人有所帮助,因为我不希望他们像我这样浪费一天! (开玩笑!)