我的要求
我已经四处寻找,我无法弄清楚如何将主屏幕上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>
示例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>
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>
我的课程
屏幕的样子
当显示设置时,用户将看到
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”会显示一个弹出窗口供用户选择苹果/梨/香蕉
点击“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>
答案 0 :(得分:1)
我自己解决了这个问题。结果证明并不太复杂。
在第一个首选项屏幕的活动的“onResume”中,我只是调用一个实用程序方法来生成首选项的摘要字符串,该摘要的摘要是包含第二个屏幕中所有选定值的值。此实用程序方法查询存储的首选项以获取首选项值,然后组成一个合适的字符串。由于此实用程序方法检查存储的首选项的值,因此当您第一次进入活动时以及从子屏幕返回活动时,摘要将是准确的。
例如
在“com.my.test.MainPreferenceActivity”“onResume”方法中我有以下内容
// update the preference's summary to a string containing the values selected in the sub-screen
Preference syncPref = findPreference(SUB_SCREN_OF_SETTINGS);
syncPref.setSummary(getSubScreenSummary(....));
public String getSubScreenSummary(){
// get the value of list_pref_1
// get the value of list_pref_2
String s = ...... // build up the string based on values of list_pref_1/list_pref_2
return s;
}