使用Fragment设置结构时setDefaultValues

时间:2017-09-23 15:32:43

标签: android android-fragments android-settings

Android指南现在设计手机和平板电脑的设置,使用碎片为不同的类别/设置组 Android Studio创建的SettingsActivity为每个设置片段创建一个XML文件:

pref_general.xml
pref_notifications.xml

那么如何使用方法setDefaultValues(context,resId,readAgain)来创建第一个共享首选项文件?

如果您在MainACtivity

上输入您的代码
PreferenceManager.setDefaultValues(this, R.xml.pref_general, false);
PreferenceManager.setDefaultValues(this, R.xml.pref_notifications, false);

只有第一行才会创建共享首选项文件,只有在该片段上定义的设置 第二行将不会被执行(因为readAgain参数为false,并且该方法已在第一行执行)

另一方面,将readAgain设置为true每次都会执行setDefaultValues

2 个答案:

答案 0 :(得分:0)

您可以在Xml文件中使用android:defaultValue

android:defaultValue:首选项的默认值,即 如果持久性已关闭或持久性已启用且具有首选项,则设置 在持久存储中找不到。

<SwitchPreferenceCompat
     android:key="key1"
     android:title="Switch Preference"
     android:summary="Switch Summary"
     android:defaultValue="true" />

或者以编程方式可以这样做:

//this returns whatever preference was set for key1 in PreferencesPage
or the default value if nothing was set 

sharedPreferences.getBoolean("key1", true));

答案 1 :(得分:0)

这是import reactDOM from 'react-dom'; reactDOM.render(<Parent />, document.getElementById("app")); 尚未解决的问题,其中,只有在setDefaultValues()时才调用一次此方法。

调用该方法时,Android系统存储键readAgain = false并将其值设置为true。 (More info on this key here)

现在,如果您拥有多个XML资源,这将成为问题,因为密钥并不特定于每个单独的XML资源。

由于我们无法修改密钥KEY_HAS_SET_DEFAULT_VALUES,因此必须将KEY_HAS_SET_DEFAULT_VALUES设置为true并存储自己的密钥对,以指示是否设置了默认值。

readAgain

其中// Some generic code if (firstTimeOpen) { PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.pref_general, true); PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.pref_advanced, true); PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.pref_notifications, true); } 是一些布尔值,指示是否所有的sharedprefs都已经初始化。