簡體   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