繁体   English   中英

Android数据绑定-如何在XML中使用基元

[英]Android data binding - how to use primitives in xml

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

<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。 `

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

不,您还需要包装文档中介绍的布局,例如:

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

在您的情况下,您将需要根<layout>标记(可能是空的<data>标记),然后是常规视图层次结构。

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

在Android Studio级别AFAIK上无需“启用”任何内容。 当然,我没有在AS 1.5.1安装中启用任何功能,并且数据绑定工作正常。

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

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

是。 使用新的gradle 2.0.0和Andorid Studio 2.0,我仅通过添加以下内容更改了我应用的gradle文件-

android {
    ...

    dataBinding{
        enabled = true
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM