由于onBuildHeaders()是3.0以后添加的,所以在3.0以前该方法不会被调用,只有3.0以后才会调用。同时在onCreate()中,当版本高于3.0时没有加载任何XML文件。这样就兼容了低版本与高版本:低于3.0时在onCreate()中加载了XML文件,此时不会执行onBuildHeaders();高于3.0时在onBuildHeaders加载xml文件,此时onCreate()中没有加载任何XML文件。preferencemanager这也是兼容低版本的一个方法:根据版本号不同,调用不同的方法。
onCreateView():创建item显示界面。
onBindView():为onCreateView()创建的界面绑定数据。比如采取一些XML文件中的title,summary之类的属性,便设置到界面上。
onClick():用来处理该条目的点击事件。如果想要执行onClick()方法,onCreateView()中的布局中的组件必须不能有焦点,也不能设置成clickable为true。
onGetDefaultValue():主要用于获取默认(android:defaultValue属性的)。如果继承Preference时,该方法必须重写。它是在构造方法中调用的,因此该方法比onCreateView()与onBindView()先执行。如:
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
defaultValue = a.getInt(index, DEFAULT_MIN);//直接使用a.get*()即可。
return defaultValue;
} onSetInitialValue():在该方法中主要可以做:将android:defaultValue属性的存储到sp中,获取sp中存储的(如果没有存储过,就显示android:defaultValue属性的)方便初始化当前的显示。在onGetDefaultValue()后调用。
当第一个参数为false时,第二个参数就是onGetDefaultValue()的返回,因此可以在此时将android:defaultValue属性的存储到sp中;第一个参数是true时,第二个参数为null。该方法有时候不执行,可能是因为onGetDefaultValue()返回的是null。如下:
@Override
protected void onSetInitialValue(boolean restorePersistedValue,
Object defaultValue) {
if (restorePersistedValue) {
//为true时,就从sp中取出原来存储过的值
mCurrentValue = this.getPersistedInt(mDefaultValue);
} else {
//将默认值设置成当前值。并且通过persist*()将默认值存储到sp中
mCurrentValue = (Integer) defaultValue;
persistInt(mCurrentValue);// 保存anddroid:defaultValue属性的值
}
}
虽然可以直接继承Preference,但是继承DialogPreference是一个更好的方法。它提供了一个item界面,并且当点击item时会弹出一个dialog。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49638-6.html
明天阿里巴巴大跌