【问题标题】:Android databinding importing view into XMLAndroid数据绑定将视图导入XML
【发布时间】:2019-11-22 05:28:35
【问题描述】:

我见过两种使用数据绑定在 XML 中设置可见性的方法

  1. <variable
        name="vm"
        type="com.example.myapp.viewmodel.MyViewmodel" /> 
    
      <androidx.constraintlayout.widget.ConstraintLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent">
    
           <ProgressBar
                style="@style/ProgressBarMediumWhite"
                android:visibility="@{vm.showLoader ? View.VISIBLE : View.GONE}" />
    
  2. <variable
        name="vm"
        type="com.example.myapp.viewmodel.MyViewmodel" /> 
    
      <androidx.constraintlayout.widget.ConstraintLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent">
    
           <ProgressBar
                style="@style/ProgressBarMediumWhite"
                android:visibility="@{vm.showLoader}" />
    

我想知道哪种方法更好,或者两者似乎都很好。 将android视图导入XML文件有多糟糕。

【问题讨论】:

    标签: android android-layout android-databinding androidx


    【解决方案1】:

    第一个更好。

    1. 检查showLoader 是否为真,然后将视图visibility 设置为可见否则消失。
    2. 第二个是传递布尔值 showLoader 作为视图的可见性,这最终会引发错误。

    【讨论】:

      【解决方案2】:

      两种方法都是一样的,没有区别。

      但是,还有另一种方法可以创建绑定适配器并在 xml 布局文件中使用它来更改可见性。

      例如:

      创建BindingAdapters.kt文件并将这段代码放入其中

      @BindingAdapter("goneUnless")
      fun goneUnless(view: View, visible: Boolean) {
          view.visibility = if (visible) VISIBLE else GONE
      }
      

      现在你可以像这样使用这个绑定适配器了

      <ProgressBar
          style="@style/ProgressBarMediumWhite"
          app:goneUnless="@{vm.showLoader}" />
      

      【讨论】:

        【解决方案3】:

        在大多数情况下,这两种方法都可以正常工作。

        但是,当您必须做出这样的选择时,请始终选择不涉及将视图作为参数传递的选项。来自源(参数的来源)的意外事件可能会导致您的应用行为异常或导致视图呈现错误。

        因此,第一种方法似乎更可靠

        android:visibility="@{vm.showLoader ? View.VISIBLE : View.GONE}"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-30
          • 1970-01-01
          • 2018-10-13
          • 2016-04-20
          • 1970-01-01
          相关资源
          最近更新 更多