Android findPreference()损坏

问题描述 投票:0回答:1

我具有以下首选布局:

xml / preferences.xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:key="screen_pref">

    <!-- Populate with paid preferences -->
    <PreferenceCategory android:title="Advanced" android:key="cat_pref_mods">

    </PreferenceCategory>

    <!-- Populate with debugging preferences -->
    <PreferenceCategory android:title="Dbg." android:key="cat_pref_dbg">

    </PreferenceCategory>

</PreferenceScreen>

第一个类别(键为“ cat_pref_mods”)通过以下代码按预期填充:

PreferenceCategory  mPreferenceCategory = (PreferenceCategory) findPreference("cat_pref_mods");
PreferenceScreen parentScreen = (PreferenceScreen) findPreference("screen_pref");
// Add category now
parentScreen.addPreference(mPreferenceCategory);

但是,当类似地填充第二个类别时:

PreferenceCategory  mPreferenceCategory = (PreferenceCategory) findPreference("cat_pref_dbg");
PreferenceScreen parentScreen = (PreferenceScreen) findPreference("screen_pref");
// Add category now
parentScreen.addPreference(mPreferenceCategory);

在preferences.xml中定义的两个类别标题,立即显示为一个彼此之间,然后将实际的首选项连接在一起。

为什么不对键“ cat_pref_mods”及其条目进行分类完全在类别“ cat_pref_dbg”之前?

尽管调试父屏幕似乎是空的(“”),即使先前已初始化:

addPreferencesFromResource(R.xml.preferences);

如果仅创建一个类别,则项目将按预期显示。创建两个标题时,类别标题会立即放在另一个标题下,但随后会按预期显示条目。

android android-layout android-preferences
1个回答
0
投票

事实证明,类别和首选项必须按顺序添加(以编程方式,作为对象),类似于:

private void addPreferences() {
    addPreferencesFromResource(R.xml.preferences);

    PreferenceScreen parentScreen = (PreferenceScreen) findPreference(KEY_PREF_SCREEN);

    PreferenceCategory catOne= new PreferenceCategory(this);
    catOne.setTitle("Cat. #1");
    parentScreen.addPreference(catOne);

    addPreferencesFromResource(R.xml.preference_one);

    PreferenceCategory catTwo = new PreferenceCategory(this);
    catTwo .setTitle("Cat. #2");
    parentScreen.addPreference(catTwo);

    addPreferencesFromResource(R.xml.preference_two);
}
© www.soinside.com 2019 - 2024. All rights reserved.