简体   繁体   English

在片段中获取共享首选项

[英]Getting Shared Preference in a Fragment

I was having some problem with shared preference in Android fragment. 我在Android片段中的共享首选项有问题。 In my MainActivity onLoad, I am checking the shared preference, if it is true, then I open up fragment A. 在我的MainActivity onLoad中,我正在检查共享首选项,如果为true,则打开片段A。

SharedPreferences prefs = getApplicationContext().getSharedPreferences("EULA_SHARED_PREFERENCE", MODE_PRIVATE);
    boolean status = prefs.getBoolean("show_eula_key", false);
    if(status == true){
        EulaFragment eulaFragment = new EulaFragment();
        eulaFragment.show(getSupportFragmentManager(), null);
}

In my fragment A, upon Accept button onClick, I update the shared preference to false: 在片段A中,在接受按钮onClick时,我将共享首选项更新为false:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("show_eula_key", false).commit();
            dismiss();

However, even though I selected accepted and restarted the app, when I relaunch the app, it keeps open up the fragment A. Any ideas? 但是,即使我选择接受并重新启动该应用程序,但在重新启动该应用程序时,它仍会打开片段A。有什么想法吗?

Thanks! 谢谢!

You use two different files: 您使用两个不同的文件:

SharedPreferences prefs = getApplicationContext().getSharedPreferences("EULA_SHARED_PREFERENCE", MODE_PRIVATE); SharedPreferences prefs = getApplicationContext()。getSharedPreferences(“ EULA_SHARED_PREFERENCE”,MODE_PRIVATE);

and

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

You must use the same at both. 您必须同时使用两者。 (tip: an Activity is a context) (提示:活动是上下文)

用这样的东西

editor.putBoolean("show_eula_key", false).apply();

问题是您正在从EULA_SHARED_PREFERENCE获取show_eula_key并保存默认首选项,您必须准确地保存来自首选项的数据

Change your second code to 将第二个代码更改为

SharedPreferences prefs = getContext().getSharedPreferences("EULA_SHARED_PREFERENCE", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("show_eula_key", false).apply();

In Fragment A 在片段A中

SharedPreferences prefs =getActivity().getSharedPreferences("EULA_SHARED_PREFERENCE", MODE_PRIVATE);
        prefs.edit().putBoolean("show_eula_key",false).apply();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM