1

问题:活动 B 总是返回 false,但是,如果我在活动 A 中检查相同的 KEY,结果为 true。为什么是这样?我检查了 KEY,在这两个活动中它是完全相同的。

编辑:谢谢大家的帮助,但是在实施您的建议后,我仍然没有运气。这是我现在拥有的:

ActivityA, extends Activity Implements OnGesturePerformedListener

//How methods are called...
read(getApplicationContext(),"fav", posName);
write(getApplicationContext(), "fav", posName, false);
...

public Boolean read(Context context, String name, String key) {
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE);
    Boolean b = sP.getBoolean(key, false);
    return b;
}

public void write(Context context, String name, String key, boolean value) {
    SharedPreferences sP = context.getSharedPreferences(name, MODE_PRIVATE);
    SharedPreferences.Editor editor = sP.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

ActivityB, extends FragmentActivity, 子类:

public static class SectionFragment extends Fragment

里面onActivityCreated()

SharedPreferences sP = getActivity().getSharedPreferences("fav", MODE_PRIVATE);
Boolean b = sP.getBoolean(posName, false);

结果 =b总是等于false

有任何想法吗?

4

3 回答 3

2

使用getSharedPreferences`:

public void write(Context context, String key, boolean value) {

    SharedPreferences sharedPreferences = context.getSharedPreferences(
            NAME_SHAREDPREFERENCES, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

public Boolean read(Context context, String key) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(
            NAME_SHAREDPREFERENCES, MODE_PRIVATE);
    Boolean b = sharedPreferences.getBoolean(key, false);
    return b;
}
于 2013-07-16T18:02:01.177 回答
2

来自 Android 文档:

Activity 持久状态通过 getPreferences(int) 方法进行管理,允许您检索和修改与 Activity 关联的一组名称/值对。要使用跨多个应用程序组件(活动、接收器、服务、提供者)共享的首选项,您可以使用底层的 Context.getSharedPreferences() 方法来检索存储在特定名称下的首选项对象。(http://developer.android.com/reference/android/app/Activity.html

所以基本上你需要使用Context.getSharedPreferences()在多个活动之间共享偏好。

于 2013-07-16T18:03:04.793 回答
0

您可以采用以下方法在任何地方获取相同的 sharedPreference :

SharedPreference mPrefs =  PreferenceManager.getDefaultSharedPreference(getApplicationContext());
 SharedPreference.Editor mEditor = mPrefs.edit();

我希望它有用。

于 2013-07-16T18:07:39.137 回答