我的要求
- 有一个充满偏好的主屏幕(main_screen)
- 单击此 main_screen 中的一个首选项(pref1)会打开设置的子屏幕(sub_screen)
- 在这个 sub_screen 中,有 2 个 ListPreferences,当用户从这些列表中选择一个值时,该 ListPreference 的摘要会更新为包含用户选择的值
- 在 main_screen 中,pref1 的摘要应该显示在子屏幕的 listPreferences 中选择的值(即摘要有 List1SelectedValue、List2SelectedValue)
- 第一次进入 main_screen 时,应该填充 pref1 的摘要
- 在进入 sub_screen 并更改值,然后返回到 main_screen 时,应更新摘要以反映 sub_screen 中新选择的值。
我四处搜索,我无法弄清楚如何将主屏幕上的 pref1 的摘要设置为在 sub_screen 中选择的值。
示例 main_screen xml
<PreferenceScreen>
<PreferenceCategory
style="@style/settings_category_text"
android:title="Section 1 Heading" >
<Preference
android:key="section1_key1"
android:title="Pref 1">
</Preference>
</PreferenceCategory>
<PreferenceCategory
style="@style/settings_category_text"
android:key="extra_settings_category"
android:title="Section 2 Heading" >
<PreferenceScreen
android:key="sub_screen"
android:title="Sub screen of settings"
android:summary="">
<intent
android:targetPackage="com.my.test"
android:targetClass="com.my.test.SubScreenPreferenceActivity" />
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
示例子屏幕 xml
<PreferenceScreen>
<PreferenceCategory
style="@style/settings_category_text"
android:title="Additional Settings" >
<ListPreference
android:key="list_pref1"
android:title="List Pref 1"
android:defaultValue="1"
android:entries="@array/list_pref1_titles"
android:entryValues="@array/list_pref1_values"
android:summary="%s"
/>
<ListPreference
android:key="list_pref2"
android:title="List Pref 2"
android:defaultValue="1"
android:entries="@array/list_pref2_titles"
android:entryValues="@array/list_pref2_values"
android:summary="%s"
/>
</PreferenceCategory>
</PreferenceScreen>
sub_screen 中列表值的示例数组
<string-array name="list_pref1_titles">
<item>Apples</item>
<item>Pears</item>
<item>Bananas</item>
</string-array>
<string-array name="list_pref1_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="list_pref2_titles">
<item>Cream</item>
<item>Ice Cream</item>
<item>Custard</item>
</string-array>
<string-array name="list_pref2_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
我的课程
- com.my.test.MainPreferenceActivity :此首选项主屏幕的代码
- com.my.test.SubScreenPreferenceActivity :此首选项子屏幕的代码
屏幕是什么样子的
显示设置时,用户将看到
Section 1 Heading
-----------------
Pref 1
Section 2 Heading
-----------------
Sub screen of settings
单击“设置的子屏幕”将带您进入第二个设置屏幕,如下所示
Additional Settings
-------------------
List Pref 1
Apples
List Pref 2
Cream
单击“List Pref 1”将显示一个弹出窗口供用户选择 Apples/Pears/Bananas
单击“List Pref 2”将显示一个弹出窗口供用户选择 Cream/Ice cream/Custard
在 SubScreenPreferenceActivity 中,我注册了一个 OnSharedPreferenceChangeListener ,以便当用户从弹出的选项之一中选择一个值时,ListPreferences 的摘要会更新为用户选择的值。
我完全坚持的
我希望 main_screen 还包含已在 sub_screen 中设置的值的摘要,例如,在主屏幕中我希望它呈现如下
Section 1 Heading
----------------
Pref 1
Section 2 Heading
------------------
Sub screen of settings
Apples, Cream
我希望当我最初进入主屏幕时,“设置的子屏幕”首选项的摘要已经设置为子屏幕中首选项的当前存储值(使用显示值而不是实际值)。
此外,当用户转到子屏幕并更改值时,返回到 main_screen 时,“设置的子屏幕”首选项的摘要会更新以显示设置的新值。
如何将 main_screen (MainPreferenceActivity) 中的摘要设置为 sub_screen 中选择的值?
当 sub_screen (SubScreenPreferenceActivity) 中的首选项更改时,如何更新 main_screen?
为什么我在自己的文件和活动中有 sub_screen xml
顺便说一句,我有一个单独的 XML 文件中的子屏幕,并且有它自己的 Activity 类,因为我需要从 Android 设置屏幕中调用它。
在 Android 设置中,当您单击我的应用程序的帐户时,它会显示“帐户和设置|同步设置”屏幕。在此屏幕中,我让它显示“第 2 节标题”PreferenceCategory 部分(就像在我的应用程序设置屏幕中一样),单击“帐户和设置|同步设置”屏幕将您带到我的应用程序中的子部分首选项屏幕。
Account & Settings | Sync Settings
AppIcon myAccount
appName
Section 2 Heading
-----------------
Sub screen of settings
Apples, Cream
DATA & SYNCHRONIZATION
----------------------
account_authenticator.xml
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="myAccount"
android:icon="@drawable/launcher"
android:label="@string/app_name"
android:smallIcon="@drawable/launcher"
android:accountPreferences="@xml/account_preferences"/>
account_preferences.xml
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceCategory
style="@style/settings_category_text"
android:key="extra_settings_category"
android:title="Section 2 Heading" />
<PreferenceScreen
android:key="sub_screen"
android:title="Sub screen of settings"
android:summary="">
<intent
android:targetPackage="com.my.test"
android:targetClass="com.my.test.SubScreenPreferenceActivity" />
</PreferenceScreen>
</PreferenceScreen>