b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

preferencemanager_android的context_preferencemanager类(11)

电脑杂谈  发布时间:2017-05-28 03:03:06  来源:网络整理

哈哈,到此就不在解释啥了,很直观了,就是这么任性,就是这么简单的实现了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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...