Android findPreference() 损坏
Android findPreference() broken
我有以下偏好布局:
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中定义的两个类别headers,立即出现一个
在彼此之下,然后将实际偏好连接起来。
为什么键为 "cat_pref_mods" 的类别及其条目不显示
完全在类别 "cat_pref_dbg"?
之前
调试时 parent 屏幕似乎是空的 (""),即使之前已初始化:
addPreferencesFromResource(R.xml.preferences);
如果只创建了一个类别,项目将按预期显示。创建两个时,类别 headers 紧挨着一个放在另一个下面,但条目之后会按预期显示。
事实证明,类别和首选项必须按顺序添加(以编程方式,作为对象),大致如下:
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);
}
我有以下偏好布局:
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中定义的两个类别headers,立即出现一个 在彼此之下,然后将实际偏好连接起来。
为什么键为 "cat_pref_mods" 的类别及其条目不显示 完全在类别 "cat_pref_dbg"?
之前调试时 parent 屏幕似乎是空的 (""),即使之前已初始化:
addPreferencesFromResource(R.xml.preferences);
如果只创建了一个类别,项目将按预期显示。创建两个时,类别 headers 紧挨着一个放在另一个下面,但条目之后会按预期显示。
事实证明,类别和首选项必须按顺序添加(以编程方式,作为对象),大致如下:
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);
}