Android:如何从多个 PreferenceActivity 实例使用的 XML 初始化默认值?

发布于 2024-12-04 05:50:02 字数 2378 浏览 0 评论 0原文

我有多个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

似狗非友 2024-12-11 05:50:02

回答我自己的问题:在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文