如何将所选数据显示为列表首选项的摘要

时间:2012-02-02 08:52:11

标签: android preferences

我是Android编程的新手。在我的应用程序中我添加了首选项类,我调用了xml首选项,它存储在我的应用程序的xml文件夹中。这是它的代码

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <ListPreference android:title="colors" android:key="colors" android:summary="list of colors to choose from " android:entries="@array/list" android:entryValues="@array/lvalues"></ListPreference> </PreferenceScreen>

并且在java类中我只写了一行就是这个  addPreferencesFromResource(R.xml.prefs);

现在我能够显示偏好类以及列表中的一些颜色数据。

我的问题是选择列表首选项,它应该向我显示摘要属性中的所选首选项。目前它显示为“可供选择的颜色列表” 我想要的是显示所选颜色,说我选择了白色,摘要应该显示为白色。

请帮帮我。

谢谢你, 麦迪。

4 个答案:

答案 0 :(得分:5)

你实际上可以在xml中完成它。试试这个:

<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />

您选择的值将替换“%s”。 有关进一步说明,请阅读此post

答案 1 :(得分:4)

在另一个代码示例中,有一个小错误导致显示旧值而不是新值。

这是一个工作版本:

ListPreference splashList = (ListPreference) findPreference("splash");
splashList.setSummary(splashList.getEntry());

splashList.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
  public boolean onPreferenceChange(Preference preference, Object newValue) {
    String nv = (String) newValue;

    if (preference.getKey().equals("splash")) {
      ListPreference splashList = (ListPreference) preference;
      splashList.setSummary(splashList.getEntries()[splashList.findIndexOfValue(nv)]);
    }
    return true;
  }

});

答案 2 :(得分:1)

您需要扩展ListPreference类并在xml文件中指定

class MyListPref extends ListPreference {

    public void onClick (DialogInterface dialog, int which) {
        this.setSummary(MyListPref.this.getEntry());
    }
}

如果您的自定义首选项类名是com.sample.MyListPref,则xml条目将

 <com.sample.MyListPref
    android:key="pref_list"
    android:title="List Preference"
    android:dialogTitle="List Pref Dialog"
    android:entries="@array/pref_items"
    android:entryValues="@array/pref_items_values"/>

答案 3 :(得分:1)

您不需要执行扩展listPreferences。在您的PreferencesActivity文件中按照我的示例放置:

final ListPreference defaultTown=(ListPreference)findPreference(getString(R.string.pref_default_town_key));         
    Log.i("try",defaultTown.getKey());

    defaultTown.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {            
            Log.i("theApp", "Selected = " + defaultTown.getValue());  
            defaultTown.setTitle(defaultTown.getValue());
            return true;         
        } 

    });     

关于更改值将更新标题 当您进入应用程序时,您需要使用当前首选项填充标题,而不是在xml中默认设置的颜色