jos*_*usa 2 android sharedpreferences android-fragments
我的共享偏好有一个非常奇怪的问题。我使用它们来存储用户 ID、不同的设置等等。如果用户单击了我的菜单中的一个项目(我正在使用Menu-Drawer),我正在使用一个切换片段的活动。
每次登录后,我都会存储用户配置文件。这工作完美。执行此操作后,我可以重新启动应用程序,从内存中杀死它,我什至可以重新启动我的设备并且我的值仍然存储。但是当我切换片段时,例如我在主视图中并单击菜单中的“关于应用程序”,一切都消失了。我的价值观是空的。
它变得更奇怪的地方:如果我已经在主视图中时通过选择主项来强制活动重新加载片段,它仍然被存储。只有当我用不同类型的片段替换它时,一切都会丢失。
我不知道为什么应用程序会这样。所有这些都在具有相同上下文的相同活动中。我总是使用 getActivity 来获取片段中的上下文。
这是我存储它的代码的简化片段。
public static void storeUserProfile(Context context, LoginEvent event, String userId, String emailAddress, String passwordHash) {
SharedPreferences userPrefs = context.getSharedPreferences(AppConfig.USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPrefs.edit();
editor.clear();
editor.putString("username", event.userName);
editor.putString("id", userId);
editor.putString("email", emailAddress);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
这就是我切换片段的方式:
HomeFeedFragment fragment = new HomeFeedFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
试试这个片段,它可以从你应用中的所有活动/片段访问。
先声明这些方法..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
Run Code Online (Sandbox Code Playgroud)
然后在您想放置首选项时调用它:
putPref("myKey", "mystring", getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
当你想获得一个偏好时调用它:
getPref("myKey", getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4509 次 |
| 最近记录: |