2
私はその中にPreferenceScreenを持つPreferenceScreenを持っています。私は起動時に最も外側のPreferenceScreenに要約を表示することができます。また、SharedPreferenceChangedのサマリーを更新することもできますが、内部のPreferenceScreen(文字列@ string/advancedを持つxml)は初期値を取得しません... onSharedPreferenceChangedを更新します。私は同様に表示するためにintialが必要です。ここに私のXMLは次のとおりです。ここで設定画面の概要を表示Android
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="main_pref">
<PreferenceCategory
android:title="@string/location_and_notifications">
<ListPreference
android:key="pref_temp_notifications"
android:title="@string/notifications"
android:entries="@array/pref_temp_notifications"
android:entryValues="@array/pref_temp_notifications_values"
android:dialogTitle="@string/notifications"
android:defaultValue="2"/>
<ListPreference
android:key="pref_notification_interval"
android:title="@string/notification_interval"
android:entries="@array/pref_notification_interval"
android:entryValues="@array/pref_notification_interval_values"
android:dialogTitle="@string/notification_interval"
android:defaultValue="15" />
<ListPreference
android:key="pref_open_at_launch"
android:title="@string/open_at_launch"
android:entries="@array/pref_open_at_launch"
android:entryValues="@array/pref_open_at_launch_values"
android:dialogTitle="@string/open_at_launch"
android:defaultValue="1"/>
<ListPreference
android:key="pref_push_notification"
android:title="@string/push_enabled"
android:entries="@array/pref_push_notification"
android:entryValues="@array/pref_push_notification_values"
android:dialogTitle="@string/push_enabled"
android:defaultValue="1"/>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/units">
<ListPreference
android:key="pref_temp_units"
android:title="@string/temperature"
android:defaultValue="@string/default_metric"
android:entries="@array/pref_temp_units"
android:entryValues="@array/pref_temp_units_values"
android:dialogTitle="@string/units" />
<PreferenceScreen
android:title="@string/advanced"
android:key="advanced_pref">
<ListPreference
android:key="pref_speed"
android:title="@string/speed"
android:entries="@array/pref_speed"
android:entryValues="@array/pref_speed_values"
android:defaultValue="@string/default_metric"/>
<ListPreference
android:key="pref_measurement"
android:title="@string/measurement"
android:entries="@array/pref_measurement"
android:entryValues="@array/pref_measurement_values"
android:defaultValue="@string/default_metric"/>
<ListPreference
android:key="pref_time"
android:title="@string/time_format"
android:entries="@array/pref_time"
android:entryValues="@array/pref_time_values"
android:defaultValue="@string/default_metric"/>
<ListPreference
android:key="pref_date"
android:title="@string/date_format"
android:entries="@array/pref_date"
android:entryValues="@array/pref_date_values"
android:defaultValue="@string/default_metric"/>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/personalization">
<ListPreference
android:key="pref_color_theme"
android:title="@string/color_theme"
android:entries="@array/pref_color_theme"
android:entryValues="@array/pref_color_theme_values"
android:dialogTitle="@string/color_theme"
android:defaultValue="-10981143" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/more">
<Preference
android:title="@string/platinum"
android:summary="@string/disable_ads"
android:key="upgradePref"/>
<Preference
android:title="@string/rate_update"
android:summary="@string/rate_app"
android:key="ratePref"/>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/about">
<Preference
android:title="@string/eula"
android:summary=""
android:key="eulaPref"/>
<Preference
android:title="@string/privacy_policy"
android:summary=""
android:key="privacyPolicyPref"/>
<PreferenceScreen
android:title="@string/version"
android:summary=""
android:key="version">
</PreferenceScreen>
<PreferenceScreen
android:title="@string/customer_support"
android:summary="@string/email_us">
<intent android:action="com.accuweather.android.EMAIL_ACCUWX"
/>
</PreferenceScreen>
<PreferenceScreen
android:title="@string/accuweather_branding"
android:summary=""
android:key="accuweatherBranding">
</PreferenceScreen>
</PreferenceCategory>
</PreferenceScreen>
は、コードスニペットです:OnCreateイベントで
私はこれを呼び出す:
for(int i=0;i<getPreferenceScreen().getPreferenceCount();i++){
initSummary(getPreferenceScreen().getPreference(i));
}
private void initSummary(Preference p) {
if (p instanceof PreferenceCategory){
PreferenceCategory pCat = (PreferenceCategory)p;
for(int i=0;i<pCat.getPreferenceCount();i++){
initSummary(pCat.getPreference(i));
}
}else{
updatePrefSummary(p);
}
}
private void updatePrefSummary(Preference p) {
if (p instanceof ListPreference) {
ListPreference listPref = (ListPreference) p;
p.setSummary(listPref.getEntry());
}
}
次にonSharedPreferenceChangedに:
@Override
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
Log.i(DEBUG_TAG, "value of key is " + key);
Preference pref = findPreference(key);
...
updatePrefSummary(findPreference(key));
}