共享首选项没有被保存(永远)在片段中?

时间:2014-01-08 21:43:41

标签: android sharedpreferences

appPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

还尝试通过名称在活动和片段上创建新的prefs文件,但仍然没有。

        boolean firstRun = appPrefs.getBoolean("firstrun", true);
        if (firstRun) {
            rotate_hint.setVisibility(View.VISIBLE);
        } else {
            rotate_hint.setVisibility(View.GONE);
        }

总是,总是,返回true。

public void hide_list_hint() {
    if (rotate_hint.getVisibility() == View.VISIBLE) {
        rotate_hint.setVisibility(View.GONE);
        Editor prefsEditor;
        prefsEditor = appPrefs.edit();
        prefsEditor.putBoolean("firstrun", true); <- facepalm
        prefsEditor.commit();
    }
}

我不知道如何在片段onCreate或onActivityCreated中尝试这个,因为我需要访问'rotate_hint'视图,该视图来自onCreateView中的膨胀视图。

2 个答案:

答案 0 :(得分:2)

你说的是真的,如果是的话你就是真的。当然它会回归真实。改变这一行;

prefsEditor.putBoolean("firstrun", false);

答案 1 :(得分:1)

我应该在你的代码中注明:
1 -

appPrefs.getBoolean("firstrun", true);

如果你不保存“fristrun”键,则defult值将为true我猜它应该是假的2 -

if (rotate_hint.getVisibility() == View.VISIBLE) {}

你应该在这个if和on上保存你的Visibility状态为true,为此状态保存false(为了更好的可读性)

我在片段上使用这种保存和恢复方法:
恢复一个CheckBox:

public void onViewCreated(View view, Bundle savedInstanceState) {
    SharedPreferences Setting = getSherlockActivity()
            .getSharedPreferences(PREFERENCENAME, 0);
    boolean Check=Setting.getBoolean(
            "NotifyChange", false);
    CheckBox Changebox = (CheckBox) view.findViewById(
            R.id.checkbox);
    Changebox.setChecked(Check);
}

并保存CheckBox的状态:

public void onDestroyView() {
    // TODO Auto-generated method stub
    super.onDestroyView();
    CheckBox Changebox = (CheckBox) getView().findViewById(
            R.id.checkbox);
    SharedPreferences Setting = getSherlockActivity()
            .getSharedPreferences(PREFERENCENAME, 0);
    Editor editor = Setting.edit();
    editor.putBoolean("NotifyChange",Changebox.isChecked);
    editor.commit();

希望有用:)