我在我的项目中使用数据绑定,当使用时<layout>,<data>我的xml绑定类中没有生成.
例如,我有activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data> </data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
现在,如果我ActivityMainBinding在我的活动/片段中写入,则显示该类不可用的错误.但是<variable>在我的xml文件中包含它后,它能够生成ActivityMainBinding类.
Android Studio:2.1.3
Classpath:com.android.tools.build:
grad :2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0
尝试设置View使用自定义变量的可见性,但发生错误:Identifiers must have user defined types from the XML file. visible is missing it.是否可以使用数据绑定设置视图可见性?谢谢.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
Run Code Online (Sandbox Code Playgroud) 我使用DataBindingApi来设置android布局中的视图.这是我的布局.
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我希望TextView显示Hello UserName.如何使用数据绑定api实现此目的.
我试图 在我的Kotlin项目中使用Android DataBinding库设置自定义属性,如下所示:
<ImageView
android:id="@+id/imgView”
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:adjustViewBounds="true"
app:imageUrl="@{segment.url}"/>
Run Code Online (Sandbox Code Playgroud)
class Utils {
companion object {
@BindingAdapter("bind:imageUrl")
@JvmStatic
fun loadImage(view: ImageView, url:String)
{Picasso.with(view.context).load(url).error(R.drawable.error).into(view)}
}
Run Code Online (Sandbox Code Playgroud)
我得到的运行时错误是:
in中的BindingAdapter不是静态的,需要使用从DataBindingComponent检索的对象.如果不使用带有DataBindingComponent的通胀方法,请使用DataBindingUtil.setDefaultComponent或使所有BindingAdapter方法保持静态.
任何解决它的指针?
这仅适用于自定义属性.其余的数据绑定工作正常
我跟着数据绑定文件自定义绑定适配器用于图像加载从官方Android开发者网站: http://developer.android.com/tools/data-binding/guide.html
成功编译代码后,我得到一个警告:
Warning:Application namespace for attribute bind:imageUrl will be ignored.
Run Code Online (Sandbox Code Playgroud)
我的守则如下:
@BindingAdapter({"bind:imageUrl"})
public static void loadImage(final ImageView imageView, String url) {
imageView.setImageResource(R.drawable.ic_launcher);
AppController.getUniversalImageLoaderInstance().displayImage(url, imageView);
}
Run Code Online (Sandbox Code Playgroud)
为什么会产生此警告?
我们如何在android中使用数据绑定将图像资源放入ImageView?
<ImageView
android:id="@+id/is_synced"
android:src="@{model.pending ? @mipmap/pending: @mipmap/synced}"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
如果pending为true,我想要一个图像,如果pending为false,我想要另一个图像.但它显示错误.我如何实现此功能?
我和我的同事都有Web应用程序的MVVM经验,而我们是本机android开发的新手.现在我们对android数据绑定有相反的看法 - 我不喜欢它的粉丝.
我的论点:
他的论点:
我做了一些调查,但关于它的讨论并不多.现在我想收集android数据绑定的优缺点.
讨论的方面包括但不限于:
将AS gradle版本升级到2.3.0后,数据绑定会遇到警告:
警告:selectMap [index]是一个盒装字段但需要取消装箱才能执行selectMap [index]?@android:颜色/白色:@android:颜色/透明.这可能会导致NPE,因此数据绑定将安全地取消它.您可以更改表达式并使用safeUnbox()显式地包装selectMap [index]以防止出现警告
selectMap是一个ObservableMap,然后我搜索这个警告,但只进行了一些讨论而没有修复它
Android Studio 2.3.0-alpha1:Databinding + int拆箱会导致编译错误
我按照链接的方式,修改selectMap[index]为safeUnbox(selectMap[index])但语法错误.
所以任何人都知道如何修复此警告?
编辑:这是xml文件代码
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<data class="SupportCountryViewHolderBinding">
<variable
name="viewModel"
type="com.goodarc.care_about.activity.account.support_country.SupportCountryHolderViewModel" />
<variable
name="dataSource"
type="com.goodarc.care_about.module.assets_file.SupportCountry" />
<variable
name="selectMap"
type="android.databinding.ObservableMap<Integer, Boolean>" />
<variable
name="index"
type="int" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@{selectMap[index] ? @android:color/white : @android:color/transparent}"
android:onClick="@{(v) -> viewModel.onItemSelectListener(selectMap, index)}"
android:orientation="vertical"
android:padding="20dp">
<TextView
style="@style/TitleLabel2"
android:layout_gravity="center_vertical|start"
android:text="@{dataSource.display}"
android:textColor="@{selectMap[index] ? @android:color/black : @android:color/white}"
tools:text="Taiwan (+886)" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
构建成功,但警告出来(我在上面).
data-binding android warnings android-gradle-plugin android-databinding
我正在使用Android Studio 2.0 Preview 4.我使用的是Android SDK工具25 rc1.无论清理/重建项目多少次,此错误都会持续存在.文件 - >无效缓存并重新启动也不起作用.我无法运行最基本的数据绑定示例.
build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.chiragshenoy.myapplication"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package com.example.chiragshenoy.myapplication;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity …Run Code Online (Sandbox Code Playgroud) 我正在使用Support Lib v23.2中的新向量drawable支持app:srcCompat并尝试通过数据绑定设置其drawable.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="mediaPojo"
type="in.ishaan.pika.data_binding.MediaPojo"/>
</data>
<RelativeLayout
android:background="@color/black"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView
... />
<ImageView
...
app:srcCompat="@{mediaPojo.isPlaying ? @drawable/ic_pause_24dp : @drawable/ic_play_arrow_24dp}"
/>
<ProgressBar
.../>
</RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
试图建立,工作室抛出:
错误:(33,30)无法找到参数类型为android.graphics.drawable.Drawable的属性'app:srcCompat'的setter.