如何访问 SherlockFragment 中的共享首选项
Posted
技术标签:
【中文标题】如何访问 SherlockFragment 中的共享首选项【英文标题】:How to access sharedpreferences in SherlockFragment 【发布时间】:2016-02-14 21:23:45 【问题描述】:我在标签中使用了夏洛克片段,但我无法访问sharedpreference
或保存它,我该怎么办?这是我的代码:
public class SettingsActivity extends SherlockFragment
private CheckBox cb1;
private Context context = getActivity();
private SharedPreferences sp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.settings_layout, container, false);
cb1 = (CheckBox)rootView.findViewById(R.id.cb1);
sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
cb1.setOnCheckedChangeListener(new OnCheckedChangeListener()
public void onCheckedChanged (CompoundButton cb, boolean isChecked)
if (isChecked)
context.getSharedPreferences("some_pref", Context.MODE_PRIVATE)
.edit()
.putBoolean("some_bool_name", true)
.commit();
);
return rootView;
如果上述方法不正确,请告诉我如何保存首选项。
LogCat
11-13 18:13:36.907: I/ActivityManager(10626): START u0 act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.myapp .test/.MainActivity 来自 pid 10836 11-13 18:13:36.907: D/ActivityManager(10626): TopActivityInfo, pkgName: com.myapp.test activityName: com.myapp.test.MainActivity bstSpecialAppKeyboardHandlingEnabled = false 11-13 18:13:36.907:D/GuidanceScreen(10824):appName:我的应用,currentPkg:com.myapp.test,事件:app_launch,控制器:键盘 11-13 18:13:36.907:D/ActivityManager(10626):显示 pkgName 的指导:com.myapp.test 11-13 18:13:36.917: D/GuidanceScreen(10824): appName: 我的应用 11-13 18:13:36.987:D/GuidanceScreen(10824):com.myapp.test 没有指导。 11-13 18:13:37.037: D/WindowManager(10626): 发送带有数据的 appClickStats 请求:[package=com.myapp.test, appname=My App, appver=1.0, clickloc=system_server] 11-13 18:13:37.237: I/ActivityManager(10626): 显示 com.myapp.test/.MainActivity: +260ms 11-13 18:13:46.227: D/AndroidRuntime(15464): 来自 cmdline 的 procName: com.myapp.test 11-13 18:13:46.227: E/AndroidRuntime(15464): 在 writeCrashedAppName, pkgName :com.myapp.test 11-13 18:13:46.227: D/AndroidRuntime(15464): 文件写入成功,内容为:com.myapp.test StringBuffer: ;com.myapp.test 11-13 18:13:46.237: E/AndroidRuntime(15464): 进程: com.myapp.test, PID: 15464 11-13 18:13:46.237: E/AndroidRuntime(15464): 在 com.myapp.test.SettingsActivity.onCreateView(SettingsActivity.java:40) 11-13 18:13:46.267: I/ActivityManager(10626): 进程 com.myapp.test (pid 15464) 已经死亡。 11-13 18:13:46.267:W/ActivityManager(10626):强制删除 ActivityRecord4b12da0c u0 com.myapp.test/.MainActivity t17:应用程序死亡,没有保存状态 11-13 18:13:46.287: I/WindowState(10626): WIN DEATH: Window4b1ac890 u0 com.myapp.test/com.myapp.test.MainActivity
【问题讨论】:
什么问题?你有错误吗?还是数据没有保存? 它强制关闭应用程序。当我尝试像那样访问 SP 时 请看问题,我加了logcat,也许有帮助! 如果您评论context.getSharedPreferences("some_pref", Context.MOD...
,您会收到错误消息吗?
是的,我收到了上述错误。
【参考方案1】:
初始化共享首选项:
private SharedPreferences loginPreferences;
private SharedPreferences.Editor loginPrefsEditor;
onCreateView() 内部:
loginPreferences = getActivity().getSharedPreferences("loginPrefs", getActivity().MODE_PRIVATE);
loginPrefsEditor = loginPreferences.edit();
保存:
loginPrefsEditor.putString("start_time", yourText);
loginPrefsEditor.commit();
检索:
String dateString = loginPreferences.getString("start_time", "");
【讨论】:
看问题中的logcat!以上是关于如何访问 SherlockFragment 中的共享首选项的主要内容,如果未能解决你的问题,请参考以下文章