美文网首页
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