Android:如何从多个 PreferenceActivity 实例使用的 XML 初始化默认值?
我有多个 PreferenceActivity 类,因为我的主要 PreferenceActivity XML 本质上是多种首选项的索引。
我正在寻求有关如何在安装后首次运行应用程序时从 XML 设置首选项默认值的帮助。我未成功尝试以下操作(来自主要活动 onCreate()):
PreferenceManager.setDefaultValues(ctx, R.xml.prefs, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsdisplay, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsloc, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsmaps, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsmisc, false);
其中 R.xml.prefs 是主首选项文件,其他是子级别首选项。
请注意,我有两个首选项活动,一个使用 R.xml.prefs 作为其描述符:
addPreferencesFromResource(R.xml.prefs);
另一个使用在其启动意图中传递的任何 xml 文件名。 (顺便说一句,其他兼容至 1.6 版本的处理此问题的方法也很有趣):
Intent intent = this.getIntent();
String data = intent.getDataString();
String pkgName = getPackageName();
int resID = getResources().getIdentifier(data , "xml", pkgName);
addPreferencesFromResource(resID);
文件: R.xml.prefs 是:
<PreferenceCategory android:title="Map Settings">
<PreferenceScreen android:title="Map Display Settings"
android:summary="Control Location Settings">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.mycompany.app"
android:targetClass="com.mycompany.app.app.SubPrefsAct"
android:data="prefsloc"/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
prefsloc.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="GPS and Location">
<CheckBoxPreference android:key="ShowLocation"
android:summary="Shows location symbol on map" android:defaultValue="true"
android:title="Show Location"></CheckBoxPreference>
<CheckBoxPreference android:key="UseGps"
android:summary="Uses GPS to refine position" android:title="Use GPS"
android:defaultValue="true"></CheckBoxPreference>
</PreferenceCategory>
</PreferenceScreen>
I have multiple PreferenceActivity classes because My main PreferenceActivity XML is essentially an index into multiple kinds of preferences.
I am looking for help on how to set the preference defaults from the XML when the app is first run after installation. I have unsuccessfully tried the following (from main activity onCreate()):
PreferenceManager.setDefaultValues(ctx, R.xml.prefs, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsdisplay, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsloc, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsmaps, false);
PreferenceManager.setDefaultValues(ctx, R.xml.prefsmisc, false);
Where R.xml.prefs is the master preferences file, and the others are sub-level preferences.
Note that I have two preferences activities, one that uses R.xml.prefs as its descriptor:
addPreferencesFromResource(R.xml.prefs);
and the other that uses whatever xml file name is passed in its startup intent. (BTW, other ways to handle this that are compatible down to 1.6 would be of interest):
Intent intent = this.getIntent();
String data = intent.getDataString();
String pkgName = getPackageName();
int resID = getResources().getIdentifier(data , "xml", pkgName);
addPreferencesFromResource(resID);
FILES:
R.xml.prefs is:
<PreferenceCategory android:title="Map Settings">
<PreferenceScreen android:title="Map Display Settings"
android:summary="Control Location Settings">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.mycompany.app"
android:targetClass="com.mycompany.app.app.SubPrefsAct"
android:data="prefsloc"/>
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
And prefsloc.xml is:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="GPS and Location">
<CheckBoxPreference android:key="ShowLocation"
android:summary="Shows location symbol on map" android:defaultValue="true"
android:title="Show Location"></CheckBoxPreference>
<CheckBoxPreference android:key="UseGps"
android:summary="Uses GPS to refine position" android:title="Use GPS"
android:defaultValue="true"></CheckBoxPreference>
</PreferenceCategory>
</PreferenceScreen>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
回答我自己的问题:在 setDefaultValues(...) 调用中使用 true 而不是 false 。
否则,对第一个 XML 文件的调用将导致其余调用不执行任何操作。
Answering my own question: use true instead of false in setDefaultValues(...) calls.
Otherwise the call for the first XML file will cause the remaining calls to not do anything.