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
- Preference的使用(3) --- 子类的使用
- Android--Preference的使用
- preference的使用
- Preference的使用
- Preference的使用
- Preference的使用
- Preference的使用
- Android-------Preference的使用
- Preference的使用
- Android Preference的使用
- Android中Preference的使用
- Android中preference的使用
- Android的Preference使用-1
- Android中preference的使用
- Android中preference的使用
- Android中preference的使用
- Android中preference的使用
- Preference 的xml使用 小结
- 火星坐标系,百度坐标系,wgs84坐标系转换算法
- SQL语言学习小结(三)数据库事务
- IOS block的一些用法例子
- Android 4.4 图形架构
- 预计全球互联网用户将会在明年突破三十亿
- Preference的使用(3) --- 子类的使用
- js解析json字符串为json对象,js解析json的6种方法
- 排序算法(一)冒泡排序算法1
- android常见开源Demo的github地址
- 数据库分切设计何必纠结于hibernate shard模式,应该简单化了
- ArcGIS教程:基于ArcGIS的栅格图像平滑处理
- 深圳高交会一年一次,疲劳有没有?
- Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity)
- Photoshop脚本 > 遍历文档的所有通道