最近在學習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.
