将UI首选项摘要字段设置为首选项的值

新的Android,我有一些代码,当用户更改首选项时,我更新UI首选项中的摘要字段是他们input的值。 但是,当创build首选项活动时,我想将“摘要”字段设置为相应首选项中的值。 请指教。 谢谢。

public class MyPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); sp.registerOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Preference pref = findPreference(key); if (pref instanceof EditTextPreference) { EditTextPreference etp = (EditTextPreference) pref; pref.setSummary(etp.getText()); } } } 

Solutions Collecting From Web of "将UI首选项摘要字段设置为首选项的值"

我也是新手,所以可能不是最好的代码,但这与我所做的相似。 你可能想注册你的监听器onResume,并取消注册onPause,而不是onCreate。 我希望这有帮助。

主要你只需要抓住pref,pref值并设置摘要。

 public class MyPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); EditTextPreference editTextPref = (EditTextPreference) findPreference("thePrefKey"); editTextPref .setSummary(sp.getString("thePrefKey", "Some Default Text")); } protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Preference pref = findPreference(key); if (pref instanceof EditTextPreference) { EditTextPreference etp = (EditTextPreference) pref; pref.setSummary(etp.getText()); } } } 

这对我有效。

 public class PrefsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { private Preference pref; private String summaryStr; String prefixStr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); SharedPreferences sharedPref = getPreferenceScreen().getSharedPreferences(); sharedPref.registerOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { //Get the current summary pref = findPreference(key); summaryStr = (String)pref.getSummary(); //Get the user input data prefixStr = sharedPreferences.getString(key, ""); //Update the summary with user input data pref.setSummary(summaryStr.concat(": [").concat(prefixStr).concat("]")); } } 

我通常做的是:
1 – 创build一个新类,扩展我需要显示的偏好types(每个偏好types1个)2 – 在其代码内部,执行相应的操作以显示更新的摘要
3 – 请参阅res / xml / preferences.xml文件中的这个类

让我来举个小例子,用于EditTextPreference:

CLS_Prefs_Edit.java

 /** * CLS_Prefs_Edit class * * This is the class that allows for a custom EditTextPrefence * (auto refresh summary). * * @category Custom Preference * @author Luca Crisi (luca.crisi.lc@gmail.com) * @copyright Luca Crisi * @version 1.0 */ package com.your_name.your_app; /* -------------------------------- Imports --------------------------------- */ import android.content.Context; import android.preference.EditTextPreference; import android.util.AttributeSet; public final class CLS_Prefs_Edit extends EditTextPreference { /* ---------------------------- Constructors ---------------------------- */ public CLS_Prefs_Edit(final Context ctx, final AttributeSet attrs) { super(ctx, attrs); } public CLS_Prefs_Edit(final Context ctx) { super(ctx); } /* ----------------------------- Overrides ------------------------------ */ @Override public void setText(final String value) { super.setText(value); setSummary(getText()); } } 

RES / XML /的preferences.xml

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/pref_phone_cat"> <!-- NORMAL EditTextPreference, NO summary update --> <!-- <EditTextPreference --> <!-- android:widgetLayout="@layout/arr_dn" --> <!-- android:key="phone" --> <!-- android:title="@string/pref_phone_title" --> <!-- android:summary="@string/pref_phone_summ" --> <!-- android:defaultValue="" --> <!-- android:inputType="phone" --> <!-- android:digits="+1234567890" --> <!-- /> --> <!-- MY EditTextPreference, WITH summary update --> <com.your_name.your_app.CLS_Prefs_Edit android:widgetLayout="@layout/arr_dn" android:key="phone" android:title="@string/pref_phone_title" android:summary="@string/pref_phone_summ" android:defaultValue="" android:inputType="phone" android:digits="+1234567890" /> </PreferenceCategory> </PreferenceScreen> 

当然,在/ res / values / strings中设置你的string,就完成了。

请注意, 此解决scheme适用于PreferenceFragments和PreferenceActivities
我使用它在2.2 Froyo上运行的应用程序(显示PreferenceActivity)以及4.4 KitKat(显示PreferenceFragment)

我希望它有帮助。