MultiSelectListPreference 的使用心得

最近在学习Android上的开发,打算做一个app。在做之前感觉很简单的功能,自己也有几年的C++经验,应该学起来很容易。但是事实告诉我,要注意的细节还是很多的。

大部分的app都会有设置页面, 用来配置一些使用上的特性,android提供了一个perferenceActivity的activity来支持与设置相关的开发工作,具体的内容可以参看sdk。这里主要说明一下如何使用MultiSelectListPreference。MultiSelectListPreference 提供了一个多选的列表供用户选择,然后会自动的持久化到SharedPreference中去,一个比较简单的xml配置节如下:

            <MultiSelectListPreference
                android:key="abc"
                android:entries="@array/days"
                android:entryValues="@array/day_value"  
                android:title="重复"
                android:summary="无"                       
                />

其中的android:entries 是弹出列表的文本数组,而android:entryValues对应相映的值数组,一一对应。android:title控制perference的文本,summary是描述性的文本。 上面代码中的 android:entries  和android:entryValues在values中进行制定,举例如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="days">
        <item>周一</item>
        <item>周二</item>
        <item>周三</item>
        <item>周四</item>
        <item>周五</item>
        <item>周六</item>
        <item>周日</item>        
    </string-array>  
    
    <string-array name="day_value">
        <item>1</item>
        <item>2</item>
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
        <item>64</item>        
    </string-array> 
</resources>

这样就实现了一个很简单的设置项,如果没有更进一步的要求就可以完成了。但是我们制定的这个preference在activity上的显示还比较单调,无法根据用户选中的项来更新preference的文本显示。为了达到这个目的,我们需要监听这个preference对应的onPreferenceChange事件来进行处理。具体的代码如下:

        Preference pref = findPreference("abc");
        pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
            @Override
            public boolean onPreferenceChange(Preference pref, Object arg1) {                
                pref.setSummary(arg1.toString());                
                return true;
            }            
        });

这样就可以动态的按照用户的选择来显示不同的 Title和Summary.

原文地址:https://www.cnblogs.com/kwliu/p/3426112.html