哈哈,到此就不在解释啥了,很直观了,就是这么任性,就是这么简单的实现了Header List的显示。
说这个的原因是上面PreferenceFragemnt分析加载设置adapter的getView方法时留下的历史问题。我们先来看看这个文件的核心代码,后面总结串起来你就明白了,如下源码:
//可以看见,他不是一个View,但是组合管理了一个View和PreferenceManager
public class Preference implements Comparable<Preference> {
......
//各种属性
......
private PreferenceManager mPreferenceManager;
//重点关注,和自定义及Preference显示原理息息相关,preference就是下面列出的xml资源
private int mLayoutResId = com.android.internal.R.layout.preference;
private int mWidgetLayoutResId;
......
//各种getXXX及setXXX方法
......
/**
* Gets the View that will be shown in the {@link PreferenceActivity}.
* 获取Preference的item显示view
*/
public View getView(View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = onCreateView(parent);
}
onBindView(convertView);
return convertView;
}
protected View onCreateView(ViewGroup parent) {
final LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = layoutInflater.inflate(mLayoutResId, parent, false);
final ViewGroup widgetFrame = (ViewGroup) layout.findViewById(com.android.internal.R.id.widget_frame);
if (widgetFrame != null) {
//mWidgetLayoutResId有专门的set方法可以设置或者重写
if (mWidgetLayoutResId != 0) {
//android:id/widget_frame为mWidgetLayoutResId所对应的布局预留空间插入
layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
} else {
//默认实现是null的
widgetFrame.setVisibility(View.GONE);
}
}
return layout;
}
/**
* Binds the created View to the data for this Preference.
* <p>
* This is a good place to grab references to custom Views in the layout and
* set properties on them.
* <p>
*/
protected void onBindView(View view) {
//设置子View相关属性
final TextView titleView = (TextView) view.findViewById(com.android.internal.R.id.title);
if (titleView != null) {
final CharSequence title = getTitle();
if (!TextUtils.isEmpty(title)) {
titleView.setText(title);
titleView.setVisibility(View.VISIBLE);
} else {
titleView.setVisibility(View.GONE);
}
}
......
//类似的各View设置操作,不再列出
}
......
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49639-11.html
三大无才
你知道吗
它就是在展示一个“警告中国”的姿态
完全彻底全部干净歼灭美強盗