终于快要大白了,PreferenceFragment的listview设置的adapter原来是PreferenceGroupAdapter。哈哈,我们继续来看看这个类,如下:
//hide类,专门用来Preference的list显示的adapter
public class PreferenceGroupAdapter extends BaseAdapter
implements OnPreferenceChangeInternalListener {
//省略相关属性定义
......
//构造方法,传入的是PreferenceScreen根布局
public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
......
//sync设置相关list列表数据后通知listview刷新
syncMyPreferences();
}
private void syncMyPreferences() {
......
//通知listview刷新当前准备的Preference列表
notifyDataSetChanged();
......
}
//省略一堆方法
......
//notifyDataSetChanged后和普通adapter一样item绘制会回调getView方法
public View getView(int position, View convertView, ViewGroup parent) {
//拿到当前item的Preference组件
final Preference preference = this.getItem(position);
......
//调运Preference的getView方法得到当前item真正的view显示,这是核心!!!!!!!!!!!!
//关于Preference的getView方法下面分析Preference源码会说到的,或者你可以直接跳到Preference源码分析部分查看。
View result = preference.getView(convertView, parent);
......
return result;
}
......
}
到此你会发现,其实无非就是ListView和Adapter的关系,而Adapter的getView所得到的View由Preference提供而已,而Adapter由PreferenceScreen管理而已。
说到PreferenceActivity现在不推荐的addPreferencesFromResource方法时其实是没啥解释的,这种模式现在被官方推荐通过PreferenceFragment的addPreferencesFromResource来实现,所以也就是说关于PreferenceActivity的addPreferencesFromResource方法(也就是在PreferenceActivity中直接添加Preference组件)其显示原理和上面分析的PreferenceFragment是一样的,所以这里就不再过多解释了。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49639-7.html
从目前美舰已闯进12海里的事实看
获得更好的发展
但是外国舰艇的数据都是真是的