美文网首页
DataBinding布局中使用ViewStub

DataBinding布局中使用ViewStub

作者: 走在冷风中吧 | 来源:发表于2019-07-23 09:57 被阅读0次

    开发过程中我们可能为了优化布局,会采用viewstub这种懒加载的方式, 当我们同时使用databinding的时候,布局应该怎么写呢?

    
    <layout xmlns:bind="http://schemas.android.com/apk/res-auto">
    
        <data>
            <variable
                name="vm"
                type="com.daniu.scrm.mine.viewmodel.MinePermissionViewModule" />
        </data>
    
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
    
            <include layout="@layout/base_titlebar_whitebg_no_shadow" />
    
            <com.daniu.scrm.base_module.view.LoadingLayoutView
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <!--这里给viewstub使用自定义标签, bind:vm, 将它需要的viewmodel数据传入--->
                <ViewStub
                    bind:vm ="@{vm}"
                    android:id="@+id/qrcode_viewstub"
                    android:layout="@layout/mine_viewstub_wechat_qrcode"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
    
            </com.daniu.scrm.base_module.view.LoadingLayoutView>
        </LinearLayout>
    </layout>
    
    

    viewstub中的布局: 变量名要与自定义的变量名保持一致, 剩余的就可以按照平时的使用正常使用了

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <data>
    <!-- 这里的变量名要与上面自定义的变量名保持一致-->
            <variable
                name="vm"
                type="com.daniu.scrm.mine.viewmodel.MinePermissionViewModule" />
        </data>
    
        <RelativeLayout
            android:id="@+id/rl_qrcode"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <ImageView
                app:loadImg="@{vm.qrCodeurl}"
                android:id="@+id/iv_code_img"
                android:layout_width="@dimen/base_wh164.0dimens164.0dp"
                android:layout_height="@dimen/base_wh164.0dimens164.0dp"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/base_wh50.0dimens50.0dp" />
    
    
            <TextView
                android:id="@+id/step"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/iv_code_img"
                android:layout_marginLeft="@dimen/base_wh53.0dimens53.0dp"
                android:layout_marginTop="@dimen/base_wh40.0dimens40.0dp"
                android:text="操作步骤 :  "
                android:textColor="@color/color_333333"
                android:textSize="@dimen/base_wh16.0dimens16.0dp" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignTop="@+id/step"
                android:layout_marginLeft="@dimen/base_wh10.0dimens10.0dp"
                android:layout_toRightOf="@+id/step"
                android:lineHeight="@dimen/base_wh24.0dimens24.0dp"
                android:text="1 截图把二维码发到其他群 \n2 用工作为先扫一扫点击登录\n3 大牛买车将继续工作"
                android:textColor="@color/color_333333"
                android:textSize="@dimen/base_wh14.0dimens14.0dp" />
        </RelativeLayout>
    </layout>
    
    

    在activity中viewstub的inflate与数据绑定:

    lateinit var viewDataBinding: MineActivityManagePermissionBinding
       override fun initViews() {
            viewDataBinding = DataBindingUtil.setContentView<ViewDataBinding>(this, R.layout.mine_activity_manage_permission) as MineActivityManagePermissionBinding
            viewDataBinding.setVariable(BR.vm, mViewModel)
        }
    
      fun inflateView(){
    //viewstub只能被inflate一次
         if (!viewDataBinding.loginedViewstub.isInflated) {
                        viewDataBinding.loginedViewstub.viewStub?.inflate()
        }
        viewDataBinding.loginedViewstub.setOnInflateListener { stub, inflated ->
                val loginedViewDatabinding = DataBindingUtil.bind<ViewDataBinding>(inflated)
    //绑定数据到viewstub
                loginedViewDatabinding?.setVariable(BR.vm, mViewModel)
            }
    }
    

    相关文章

      网友评论

          本文标题:DataBinding布局中使用ViewStub

          本文链接:https://www.haomeiwen.com/subject/tvinlctx.html