Pet*_*rdk 109 android default preferences
我正在使用PreferenceActivity让用户设置一些值.我正在使用定义的首选项为xml文件提供它.
我android:defaultValue=""为他们设置了全部.
当我启动我的应用程序时,我需要首选项,或者如果它们尚未手动设置,我想要默认值:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Run Code Online (Sandbox Code Playgroud)
但是,当android:defaultValue="true"我还是得到的时候false.因此,看起来XML中设置的defaultValues不会在初始化首选项屏幕时使用.
我不想硬编码方法中的默认值getBoolean().那么,有没有办法获得默认值,只在一个地方定义这些?
pix*_*xel 161
这个问题与我的相似:
只需在onCreate方法中使用此代码:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Run Code Online (Sandbox Code Playgroud)
它将从XML加载您的首选项,最后一个参数(readAgain)将保证不会覆盖用户首选项.
请查看Android API中的PreferenceManager.setDefaultValues以进行进一步调查.
Fra*_*amo 27
请注意,如果您正在使用
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
检索您必须
用来设置默认值的首选项!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
例如:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
我希望这可以帮助别人.
Ste*_*ing 12
在Pixel的接受答案中:
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Run Code Online (Sandbox Code Playgroud)
据说,false默认值不会被覆盖.这不是它的功能,如果您的应用程序有多个入口点,它只是一个停止解析的效率标志.遗憾的是,每个首选项文件都没有进行测试,因此如果您有多个首选项文件,则必须true在除第一个之外的所有文件上进行编码.
如果您担心效率,可以编写类似的代码.
final static private int SPL = 1;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.getInt("spl", 0) != SPL)
{
PreferenceManager.setDefaultValues(this, R.xml.prefs1, true);
PreferenceManager.setDefaultValues(this, R.xml.prefs2, true);
sp.edit().putInt("spl", SPL).apply();
}
Run Code Online (Sandbox Code Playgroud)
如果您添加了更多共享首选项,只需将SPL设置为高数字即可.
| 归档时间: |
|
| 查看次数: |
92016 次 |
| 最近记录: |