Android布局数据绑定不起作用

时间:2017-04-20 07:30:10

标签: android android-databinding

我尝试在视图中动态隐藏/显示元素,因此我按照此示例Dynamically toggle visibility of layout elements with Android data-binding.

我用

  • Android Studio 2.3.1
  • compileSdkVersion 23
  • buildToolsVersion '25 .0.2'
  • minSdkVersion 15
  • targetSdkVersion 17

我的第一个问题是错误消息“属性缺少Android命名空间”,但我找到的所有示例都没有提供命名空间

enter image description here

然而,我试图启动我的项目并得到另一个错误:

android:visibility="@{@bool/list_show_icon ? View.VISIBLE : View.GONE}"

Error:(22, 29) No resource found that matches the given name (at 'visibility' with value '@{@bool/list_show_icon ? View.VISIBLE : View.GONE}').

似乎他没有尝试评估表达式

3 个答案:

答案 0 :(得分:1)

LinearLayout代码

中添加您的根layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 xmlns:app="http://schemas.android.com/apk/res-auto">

  <data>
     <import type="android.view.View"/>
  </data>
  <LinearLayout>
  </LinearLayout>
</layout>

答案 1 :(得分:0)

使用DataBinding的第一条规则是您的XML根元素必须是<layout>

<layout>的一部分,而不是其他布局。在你的情况下它应该是

<layout>
    <data> </data>
    <LinearLayout>

    </LinearLayout>
</layout>

答案 2 :(得分:0)

正如基肖尔已经写过的那样。

必须是根元素并包装整个布局+数据。

它的

yarn global add highcharts-export-server

无论如何,如果使用数据绑定,我建议使用可观察的布尔/整数,而不是使用布局中的可见性逻辑。这可以使用类似

的ViewModel来解决
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto">
  <data>
      <import type="android.view.View" />
  </data>
 <LinearLayout  
       android:layout_width="match_parent" 
       android:layout_height="match_parent"
       android:background="?android:attr/activatedBackgroundIndicator"
       android:minHeight="56dp"
       android:orientation="horizontal"
       android:paddding="8dp">
  </LinearLayout>
</layout>

并在ViewModel(mvvm)中使用:

 <data>
     <variable name="viewModel" type="YourViewModelClass" />
 </data>

 <LinearLayout> ... <TextView android:visibility="@{viewModel.isVisible}" />
 </LinearLayout>

它只是更干净,但不影响性能或任何东西。