Preference的使用(3) --- 子类的使用

来源:互联网 发布:云计算岗位职责 编辑:程序博客网 时间:2024/06/06 15:50

废话不多说,直接上代码:

XML为:

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen     xmlns:android="http://schemas.android.com/apk/res/android"     >    <PreferenceCategory         android:title="DialogPreference">                <EditTextPreference android:key="edit0"            android:title="EditTextPreference"            android:summary="EditTextPreference summary"/>                <ListPreference             android:title="ListPreference"            android:summary="ListPreference summary"            android:entries="@array/myentry"            android:entryValues="@array/myentryvalues"/>                 <MultiSelectListPreference android:title="MultiSelectListPreference"            android:summary="MultiSelectListPreference summary"            android:entries="@array/myentry"            android:entryValues="@array/myentryvalues"/>            </PreferenceCategory>        <PreferenceCategory         android:title="RingtonePreference">         <RingtonePreference              android:title="RingtonePreference"             android:summary="RingtonePreference "/>    </PreferenceCategory>            <PreferenceCategory         android:title="TwoStatePreference">        <SwitchPreference             android:title="SwitchPreference"            android:summary="SwitchPreference  summary"            android:summaryOn="SwitchPreference summaryOn"            android:summaryOff="SwitchPreference summaryOff"            android:switchTextOn="SwitchPreference switchTextOn"            android:switchTextOff="SwitchPreference switchTextOff"/>                <CheckBoxPreference              android:title="CheckBoxPreference"            android:summary="CheckBoxPreference  summary"            android:summaryOn="CheckBoxPreference summaryOn"            android:summaryOff="CheckBoxPreference summaryOff"/>            </PreferenceCategory></PreferenceScreen>
<string-array name="myentry">       <item >enrty0</item>       <item >enrty1</item>       <item >enrty2</item>       <item >enrty3</item>       <item >enrty4</item>   </string-array>      <string-array name="myentryvalues">       <item >enrty0_v</item>       <item >enrty1_v</item>       <item >enrty2_v</item>       <item >enrty3_v</item>       <item >enrty4_v</item>   </string-array>

现在看一下显示效果

他们的值都是跟sharedPrefernce绑定在一起的,按返回键退出再进来的时候,显示的是上一次的结果。

但是我现在操作的结果却不是的 ,而且在data 下是没有shared_prefs保存

原因是没有设Key值 ,那么值也就没有办法保存状态了。

现在加上Key,再看 ,那么返回  退出再进来是会显示原来的值,看下保存的值

所有要保存值 那么一定要设置Key ,而且从上图可以看出存储的名字跟key有关系,所以请不要重复,如果重复的,那么一个值改变将会影响另一个prefernence的值


1. 先看EdittextPreference的使用

<span style="font-size:18px;">private void findPreference() {editTextPreference = (EditTextPreference) findPreference("edit0");if (null != editTextPreference){editTextPreference.setOnPreferenceClickListener(this);editTextPreference.setOnPreferenceChangeListener(this);}}@Overridepublic boolean onPreferenceClick(Preference preference) {if (preference.getKey().equals("edit0")){String contect = ((EditTextPreference)preference).getText();Log.i(TAG , "contect = " + contect);}return false;}@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {</span><strong><span style="font-size:24px;">if (preference.getKey().equals("edit0")){String  temp = (String) newValue;((EditTextPreference)preference).setText(temp);Log.i(TAG , "onPreferenceChange newValue = " + temp);}</span></strong><span style="font-size:18px;">return false;}</span>

onPreferenceClick
  是点击时候的回调,onPreferenceChange 是点击弹出框确定的时候调用的(不管值是否变化)

而且要调用setText 才会把newValue存在 sharedPreference 里


2.ListPreference   点击弹出一个list的对话框的preference,而且是单选的

<span style="background-color: rgb(240, 240, 240);">@SuppressWarnings("deprecation")private void findPreference() {editTextPreference = (EditTextPreference) findPreference("edit0");if (null != editTextPreference){editTextPreference.setOnPreferenceClickListener(this);editTextPreference.setOnPreferenceChangeListener(this);}listPreference = (ListPreference) findPreference("ListPreference");if (null != listPreference){listPreference.setOnPreferenceClickListener(this);listPreference.setOnPreferenceChangeListener(this);}}@Overridepublic boolean onPreferenceClick(Preference preference) {String key = preference.getKey();if (key.equals("edit0")){String contect = ((EditTextPreference)preference).getText();Log.i(TAG , "contect = " + contect);}else if (key.equals("ListPreference")){String entry = (String) listPreference.getEntry();String value = (String) listPreference.getValue();Log.i(TAG, "entry = " + entry + " value = " + value);}return false;}@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {String key = preference.getKey();if (key.equals("edit0")){String  temp = (String) newValue;((EditTextPreference)preference).setText(temp);Log.i(TAG , "onPreferenceChange newValue = " + temp);}else if (key.equals("ListPreference")){</span><span style="background-color: rgb(255, 102, 0);">String  temp = (String) newValue;((ListPreference)preference).setValue(temp);Log.i(TAG , "onPreferenceChange newValue = " + temp)</span><span style="background-color: rgb(240, 240, 240);">;}return false;}</span>
它有一个Entries   还有一个entryValues    前者是显示用的,后者是真正的值

同样要调用setValue 来可以保存到 sharedpreference中(除非是第一次)

可以通过setDefaultValue 来设置默认的值
3. MultiSelectListPreference   是多选的ListPreference

@SuppressLint("NewApi")@SuppressWarnings("deprecation")private void findPreference() {editTextPreference = (EditTextPreference) findPreference("edit0");if (null != editTextPreference){editTextPreference.setOnPreferenceClickListener(this);editTextPreference.setOnPreferenceChangeListener(this);}listPreference = (ListPreference) findPreference("ListPreference");if (null != listPreference){listPreference.setOnPreferenceClickListener(this);listPreference.setOnPreferenceChangeListener(this);}multiSelectListPreference = (MultiSelectListPreference) findPreference("MultiSelectListPreferencekey");if (null != multiSelectListPreference){multiSelectListPreference.setOnPreferenceClickListener(this);multiSelectListPreference.setOnPreferenceChangeListener(this);}}@Overridepublic boolean onPreferenceClick(Preference preference) {String key = preference.getKey();if (key.equals("edit0")){String contect = ((EditTextPreference)preference).getText();Log.i(TAG , "contect = " + contect);}else if (key.equals("ListPreference")){String entry = (String) listPreference.getEntry();String value = (String) listPreference.getValue();Log.i(TAG, "entry = " + entry + " value = " + value);}else if (key.equals("MultiSelectListPreferencekey")){Set<String> temp = ((MultiSelectListPreference)preference).getValues();<span style="color:#ff6600;">Iterator<String>  iterator = temp.iterator();while(iterator.hasNext()){String item = iterator.next();Log.i(TAG , "  valuse : " + item);}</span>}return false;}@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {String key = preference.getKey();if (key.equals("edit0")){String  temp = (String) newValue;((EditTextPreference)preference).setText(temp);Log.i(TAG , "onPreferenceChange newValue = " + temp);}else if (key.equals("ListPreference")){String  temp = (String) newValue;((ListPreference)preference).setValue(temp);Log.i(TAG , "onPreferenceChange newValue = " + temp);}else if (key.equals("MultiSelectListPreferencekey")){Set<String>  temp = (Set<String>) newValue;<span style="color:#cc0000;">Iterator<String>  iterator = temp.iterator();while(iterator.hasNext()){String item = iterator.next();Log.i(TAG , "newValue  " + item);}</span>((MultiSelectListPreference)preference).setValues(temp);}return false;}<strong></strong>
 注意的是由于是多选,就不能直接返回一个string  而是一个set<String>  ,使用方法如上

CheckBoxPreference  跟 SwitchPreference 的使用方法 跟上述差不多

看一下API就知道有那功能了:

CheckBoxPreference      下面函数看函数名就知道是啥意思了

setChecked(boolean checked)  isChecked()   

getSummaryOff()   没有check的时候的summary

getSummaryOn()    check的时候的summary

setSummaryOff   setSummaryOff

对于 SwitchPreference 

还有

setSwitchTextOff  setSwitchTextOn  getSwitchTextOff  getSwitchTextOn 

0 0
原创粉丝点击