ViewStub你肯定听过,但是这些细节了解吗,Android应用性能优化

 }

}




[](
)_3_inflate()方法解析

---------------------------------------------------------------------------



核心来了,平时用的时候,会经常调用到该方法。inflate() 是关键的加载实现,代码如下所示:



public View inflate() {

// 获取父视图

final ViewParent viewParent = getParent();



if (viewParent != null && viewParent instanceof ViewGroup) {

    // 如果没有指定布局,就会抛出异常

    if (mLayoutResource != 0) {

        // viewParent 需为 ViewGroup

        final ViewGroup parent = (ViewGroup) viewParent;

        final LayoutInflater factory;

        if (mInflater != null) {

            factory = mInflater;

        } else {

            // 如果没有指定 LayoutInflater

            factory = LayoutInflater.from(mContext);

        }

        // 获取布局

        final View view = factory.inflate(mLayoutResource, parent,

                false);

        // 为 view 设置 Id

        if (mInflatedId != NO_ID) {

            view.setId(mInflatedId);

        }

        // 计算出 ViewStub 在 parent 中的位置

        final int index = parent.indexOfChild(this);

        // 把 ViewStub 从 parent 中移除

        parent.removeViewInLayout(this);



        // 接下来就是把 view 加到 parent 的 index 位置中

        final ViewGroup.LayoutParams layoutParams = getLayoutParams();

        if (layoutParams != null) {

            // 如果 ViewStub 的 layoutParams 不为空

            // 就设置给 view

            parent.addView(view, index, layoutParams);

        } else {

            parent.addView(view, index);

        }



        // mInflatedViewRef 就是在这里对 view 进行了弱引用

        mInflatedViewRef = new WeakReference<View>(view);



        if (mInflateListener != null) {

            // 回调

            mInflateListener.onInflate(this, view);

        }



     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值