嗯,曾经一度想用preference来做我项目的设置菜单的,但突然发现现在的菜单列表都是仿ios来做的。所以放弃preference改用了listview,但毕竟是个知识点,还是在网上查了点资料学习下~
我理解的preference:
1.创建一个preferenceActivity,并
2.在xml文件夹下创建一个xml文件。
3.添加preference相关元素,xml中各个元素的解释如下:
1)preferenceScreen是根节点,相当于layout中的LinearLayout之类的父级容器。preferenceScreen中可以再次包裹preferenceScreen,点击子preferenceScreen会进入子preferenceScreen所包裹的界面。
2)preferenceCategory是preference的类别,可以将多个preference放入preferenceCategory达到分类的目的,其本身无法点击。
3)preference是最普通的选项,其他如CheckBoxPreference、EditTextPreference都是继承自他并拓展出不同的用法的(各preference具体用法看上面转载的博客),他们都是用于点击来处理事件的。前面两个是容器和类别的话,preference是真正发挥作用的选项。
4.Activity通过addPreference方法来关联xml文件,通过findPreference方法进行绑定子preference。
6.最后是最重要的,实现preference的触发事件,它的3个事件方法具体用法如下(直接抄了):
一.onPreferenceTreeClick(最常用)
public boolean onPreferenceTreeClick (PreferenceScreen
preferenceScreen, Preference preference)
说 明
: 当Preference控件被点击时,触发该方法。
参数说明:
preference 点击的对象。
返回值:
true 代表点击事件已成功捕捉,无须执行默认动作或者返回上层调用链。
例如,不跳转至默认Intent;false
代表执行默认动作并且返回上层调用链。例如,跳转至默认Intent。
二.onPreferenceChange
boolean
onPreferenceChange(Preferencepreference,ObjectobjValue)
说明: 当Preference的元素值发送改变时,触发该事件。
返回值:true
代表将新值写入sharedPreference文件中;false
则不将新值写入sharedPreference文件
三.onPreferenceClick
public
booleanonPreferenceClick(Preference preference)
说明:当点击控件时触发发生,可以做相应操作。
四.触发规则
1)先调用onPreferenceClick()方法,如果该方法返回true,则不再调用onPreferenceTreeClick方法
;如果onPreferenceClick方法返回false,则继续调用onPreferenceTreeClick方法。
2)onPreferenceChange的方法独立与其他两种方法的运行。也就是说,它总是会运行。
补充:点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值,然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。
over~不知道preference可不可以优化下UI,如果好看点我觉得还是可以用的~