Android ListPreference的使用

1,802 阅读1分钟

1、首先布局文件:(mytest.xml)

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/my_test">
        <ListPreference 
            android:key="@string/key" // 设置选项键值,用于在java文件中查找            
            android:title="@string/title" // 选项标题
            android:dialogTitle="@string/dialog_title" // 选项弹窗标题            
            android:entries="@array/entries_str" // 显示的选项内容
            android:entryValues="@array/entries_values_str" // 显示的选项对应的值
            android:defaultValue="@string/default_str" // 默认值
            android:summary="@string/summary_str" // 选中的项显示在item中
            />
    </PreferenceCategory>
</PreferenceScreen>

2、数据文件:(strings.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="key">key</string>
    <string name="title">你最喜欢的蔬菜</string>
    <string name="dialog_title">蔬菜选项</string>    <string-array name="entries_str">
        <item >白菜</item>
        <item >萝卜</item>
        <item >豆芽</item>
        <item >芹菜</item>
    </string-array>
    <string-array name="entries_str">
        <item >白菜</item>
        <item >萝卜</item>
        <item >豆芽</item>
    </string-array>
   <string-array name="entries_values_str">       <item >"0"</item>
       <item >"1"</item>
       <item >"2"</item>
   </string-array>    <string name="default_str">"0"</string>
    <string name="dialog_title">请选择你喜欢的蔬菜</string>
    <string name="summary_str">白菜</string>
</resources>

3、逻辑Code:

public class ListPreferenceTest extends PreferenceActivity implements OnPreferenceChangeListener{
    // 创建一个ListPreference对象
    ListPreference lp;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 过滤已经的XML文件资源,并将当前的preference层添加到这个preference层当中 
        addPreferencesFromResource(R.xml.preference);
        // 初始化这个ListPreference对象
        lp=(ListPreference)findPreference(getString(R.string.key));
        // 设置获取ListPreference中发生的变化 
        lp.setOnPreferenceChangeListener(this);
        /**让ListPreference中的摘要内容(即summary)显示为当前ListPreference中的实体对应的值
         * 这个方法的作用是为了当下一次打开这个程序时会显示上一次的设置的summary(摘要)
         * 如果没有添加这个方法,当再次打开这个程序时,它将不会显示上一次程序设置的值,而
         * 是显示默认值*/
        lp.setSummary(lp.getEntry());
    }
    
    // 让所选择的项显示出来,获取变化并显示出来
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if(preference instanceof ListPreference) {
            ListPreference listPreference = (ListPreference)preference;
            // 获取ListPreference中的实体内容
            CharSequence[] entries = listPreference.getEntries();		   

            // 获取ListPreference中的实体内容的下标值
            int index = listPreference.findIndexOfValue((String)newValue); 
            // 把listPreference中的摘要显示为当前ListPreference的实体内容中选择的那个项目
            listPreference.setSummary(entries[index]);
        }
        return true;
    }
}