My requirement
- Have a main screen full of preferences (main_screen)
- One preference (pref1) in this main_screen when clicked upon opens a
sub screen of settings (sub_screen)
- In this sub_screen, there are 2 ListPreferences, when the user
selects a value from these lists, the summary for that ListPreference
is updated to contain the value the user selected
- in the main_screen, the summary for pref1 should show the values
selected in the subscreen's listPreferences (i.e. the summary has
List1SelectedValue, List2SelectedValue)
- On going into the main_screen for the first time, the summary for
pref1 should be populated
- On going to the sub_screen and changing the values, and then
returning to the main_screen the summary should be updated to reflect
the newly selected values in sub_screen.
I have searched around and i can not work out how to set the summary of the pref1 on the main screen to the values selected in the sub_screen.
Sample 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>
Sample sub_screen 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>
Sample arrays for list values in 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>
My classes
- com.my.test.MainPreferenceActivity : code for this main screen of
preferences
- com.my.test.SubScreenPreferenceActivity : code for this sub screen
of preferences
What the screens look like
When the settings are displayed the user will see
Section 1 Heading
-----------------
Pref 1
Section 2 Heading
-----------------
Sub screen of settings
Clicking on "Sub screen of settings" will take you to a second settings screen that looks like the following
Additional Settings
-------------------
List Pref 1
Apples
List Pref 2
Cream
Clicking on "List Pref 1" will show a popup for the user to select Apples/Pears/Bananas
Clicking on "List Pref 2" will show a popup for the user to select Cream/Ice cream/Custard
In SubScreenPreferenceActivity i have registered an OnSharedPreferenceChangeListener so that when the user selects a value from one of the options popped up the summary for the the ListPreferences is updated with the value the user has selected.
What I am completely stuck on
I would like the main_screen to also contain a summary of the values that have been set in the sub_screen, for example, in the main screen i would like it to render like the following
Section 1 Heading
----------------
Pref 1
Section 2 Heading
------------------
Sub screen of settings
Apples, Cream
I would like it that when i go into the main_screen initially, the "Sub screen of settings" preference's summary is already set to the currently stored values for the preferences in the sub-screen (using the display values not the actual values).
Also when the user goes to the sub screen and changes the values, on returning to the main_screen the "Sub screen of settings" preference's summary is updated to show the new values of the settings.
How do i set the summary in the main_screen (MainPreferenceActivity) to the values selected in the sub_screen?
How do i update the main_screen when the preferences in the sub_screen (SubScreenPreferenceActivity) change?
Why I have the sub_screen xml in its own file and activity
By the way, I have the sub-screen in a separate XML file and with its own Activity class as I need to call it from the Android settings screens.
In the Android settings, when you click on the Account for my application it shows the "Account & Settings | Sync Settings" screen. In this screen i have it displaying the "Section 2 Heading" PreferenceCategory section (just like in my applications settings screen), clicking on "Account & Settings | Sync Settings" screen takes you to the sub-section preferences screen in my application.
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>