【问题标题】:Android data binding - how to use primitives in xmlAndroid数据绑定——如何在xml中使用原语
【发布时间】:2016-04-29 07:55:23
【问题描述】:

我在 android 中有以下 xml,我正在尝试使用 xml 来演示一个点。我想使用原始数学,根据结果我将显示一个文本视图。例如:

<TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="i am now visible"
            android:visibility="@{5*5 ==25 ? View.VISIBLE : View.GONE}"/>

这显然只是为了我的个人教育,但可以这样做吗?还是必须在课堂上?

现在我得到一个构建编译器错误,因为它将整个事物视为资源类型而不是数据绑定。同样在我的 gradle 构建文件中,我启用了数据绑定:

dataBinding {
    enabled = true
}

如果有必要,整个 xml 文件看起来像这样,请原谅内务,我只需要知道为什么数据绑定不起作用而不是文件的其余部分。并且 textview 确实出现在视图中。

<LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/sample_main_layout">


            <TextView
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="i am now visible"
                android:visibility="@{1==1 ? View.VISIBLE : View.GONE}"
               />


    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />



</LinearLayout>

我感觉我没有设置数据绑定对吗?我的 gradle 文件启用了它,然后对于类路径我尝试这样做:

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-alpha3'
    classpath 'com.android.databinding:dataBinder:1.+'
}

但 gradle 无法同步,说明没有这样的类路径。错误是这样的:

 `Error:Unable to find method 'android.databinding.tool.LayoutXmlProcessor.<init>(Ljava/lang/String;Landroid/databinding/tool/writer/JavaFileWriter;IZLandroid/databinding/tool/LayoutXmlProcessor$OriginalFileLookup;)V'.

我在网上搜索,但我找不到在 android studio 中启用数据绑定的官方方法。我在 IDE 的 2.0 上。 `

【问题讨论】:

  • 这是在带有 &lt;layout&gt; 根标签的布局资源中吗?
  • 是的,我更新了问题。如果我从 xml 文件中的 textview 中删除数据绑定引用,则布局本身可以正常工作。要启用数据绑定,我只需要在 gradle 中设置 enabled =true 对吗?还有什么吗?

标签: android data-binding


【解决方案1】:

要启用数据绑定,我只需要在 gradle 中设置 enabled =true 对吗?

不,您还需要包装您的布局,如the documentation 中所述,例如:

<?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>

    <import type="android.text.Html"/>

    <variable
      name="question"
      type="com.commonsware.android.databind.basic.Question"/>
  </data>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
      android:id="@+id/icon"
      android:layout_width="@dimen/icon"
      android:layout_height="@dimen/icon"
      android:layout_gravity="center_vertical"
      android:contentDescription="@string/icon"
      android:padding="8dip"
      app:error="@{@drawable/owner_error}"
      app:imageUrl="@{question.owner.profileImage}"
      app:placeholder="@{@drawable/owner_placeholder}"/>

    <TextView
      android:id="@+id/title"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_gravity="left|center_vertical"
      android:layout_weight="1"
      android:text="@{Html.fromHtml(question.title)}"
      android:textSize="20sp"/>

    <TextView
      android:id="@+id/score"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_vertical"
      android:layout_marginLeft="8dp"
      android:layout_marginRight="8dp"
      android:text="@{Integer.toString(question.score)}"
      android:textSize="40sp"
      android:textStyle="bold"/>

  </LinearLayout>
</layout>

在您的情况下,您需要根 &lt;layout&gt; 标记,可能是一个空的 &lt;data&gt; 标记,然后是您的常规视图层次结构。

我在网上搜索,但我找不到在android studio中启用数据绑定的官方方法

在 Android Studio 级别 AFAIK 中没有什么需要“启用”的。当然,我没有在我的 AS 1.5.1 安装中启用任何东西,并且数据绑定工作正常。

【讨论】:

    【解决方案2】:

    检查您的Android Gradle 版本!
    如果您的Android Gradle Tool 版本是2.0.0-alpha1 或更高版本,那么这可能是错误的来源。
    因为当我将版本更改为1.5.0 时,我就摆脱了这个错误。
    developer.android.com 告诉我 1.5.0-alpha1 或更高版本。
    当我的版本也更高时,我不知道为什么会出现错误。
    知道的请告诉我!

    【讨论】:

      【解决方案3】:

      要启用数据绑定,我只需在 gradle right 中设置 enabled =true ?

      是的。使用新的 gradle 2.0.0 和 Andorid Studio 2.0 我只是通过添加这个来更改我的应用程序的 gradle 文件 -

      android {
          ...
      
          dataBinding{
              enabled = true
          }
      }
      

      它就像一个魅力。 项目的gradle文件中不需要添加classpath'com.android.databinding:dataBinder:1.+',app的gradle文件中也不需要添加apply plugin: 'com.android.databinding'

      【讨论】:

        猜你喜欢
        • 2021-03-14
        • 1970-01-01
        • 2017-07-28
        • 2016-04-24
        • 2020-05-25
        • 2017-02-13
        • 2011-05-22
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多