Articles of android databinding

android数据绑定的优缺点是什么?

我的同事和我都有Web应用程序的MVVM经验,而我们是本机android开发的新手。 现在我们对android数据绑定有相反的看法 – 我不喜欢它的粉丝。 我的论点: 减少样板代码,从而减少样板代码 耦合较少 更强的可读性 function强大,易于实现自定义属性和自定义视图 甚至比findViewById更快( 细节 ) 他的论点: 自动生成的.class会增加应用程序大小。 更难调试 我做了一些调查,但关于它的讨论并不多。 现在我想收集android数据绑定的优缺点。 讨论的方面包括但不限于: unit testing 应用程序大小 性能 学习曲线 可读性 耦合

Android数据绑定@BindingConversion失败,int为string

在尝试为int生成@BindingConversion时遇到一个神秘的问题。 以下代码适用于浮点到字符串 : XML: … … 码: public class SomeModel { public ObservableFloat number = new ObservableFloat(); } 和设置: viewModel.number.set(3.14f); 但是,如果我尝试对字符串进行同样的操作,我会崩溃。 public ObservableInt number = new ObservableInt(); 同 viewModel.number.set(42); 我得到以下内容: FATAL EXCEPTION: main Process: …myapplication, PID: 14311 android.content.res.Resources$NotFoundException: String resource ID #0xfa0 at android.content.res.Resources.getText(Resources.java:1123) at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52) at android.widget.TextView.setText(TextView.java:4816) at …executeBindings(ActivityAdaptersBinding.java:336) at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355) 有任何想法吗? 谢谢!

Gradle找不到com.android.databinding:dataBinder:1.0-rc0

我正在浏览https://developer.android.com/tools/data-binding/guide.html上的Android数据绑定指南。 我已经确定我正在运行Android Studio 1.3(金丝雀版)。 遵循指南, 我收到此错误: Gradle sync failed: could not find com.android.databinding:library:1.0-rc0 还有其他人有同样的问题吗? 谢谢你的帮助。 App build.gradle buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.3.0-beta1’ classpath “com.android.databinding:dataBinder:1.0-rc0” } } allprojects { repositories { jcenter() } } 模块build.graddle apply plugin: ‘com.android.application’ apply plugin: ‘com.android.databinding’ apply plugin: ‘android-apt’ def AAVersion = ‘3.3’ def MyProject = […]

数据绑定Android – types参数T具有不兼容的上限:ViewDataBinding和MainActivity

我正在使用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 { […]

我想在android,Data Binding Api中为TextView连接两个字符串

我使用DataBinding Api在android布局中设置视图。 这是我的布局。 layout.xml 我希望TextView显示Hello UserName 。 如何使用数据绑定api实现此目的。

使用DataBinding库设置背景颜色资源或null

我想使用DataBinding库在我的视图上设置背景颜色或null ,但是我尝试运行它时遇到exception。 java.lang.NullPointerException: Attempt to invoke virtual method ‘int java.lang.Integer.intValue()’ on a null object reference 我是这样做的: android:background=”@{article.sponsored ? @color/sponsored_article_background : null}” 我也试过设置转换但它没有用。 @BindingConversion public static ColorDrawable convertColorToDrawable(int color) { return new ColorDrawable(color); } 最后,我使用@BindingAdapter解决了它,但我想知道如何正确地完成它。

Android数据绑定ObservableList行为问题

我发现很难发现android.databinding.ObservableList作为数据绑定function的真正存在理由。 起初它看起来像一个很酷的工具来显示列表,通过数据绑定 ,通过xml将它们添加到RecyclerView 。 为此,我制作了一个像这样的BindingAdapter : @BindingAdapter(value = {“items”}, requireAll = false) public static void setMyAdapterItems(RecyclerView view, ObservableList items) { if(items != null && (view.getAdapter() instanceof MyAdapter)) { ((GenericAdapter) view.getAdapter()).setItems(items); } } 这样,我可以使用属性app:items在设置了MyAdapter的RecyclerView中的项目来更新其项目。 现在ObservableList的最佳function是你可以向它添加一个OnListChangedCallback ,它处理RecyclerView可用的相同事件,以添加/移动/删除/更改其中的项目,而无需实际重新加载整个列表。 所以我想要实现的逻辑是: 我从一个空的MyAdapter开始 从我的API获取项目时,我实例化一个ObservableArrayList包装它们并将其传递给binding 数据绑定调用我的BindingAdapter将项目传递给MyAdapter 当MyAdapter收到新项目时,它清除旧项目并将OnListChangedCallback添加ObservableList收到的ObservableList以处理微更改 如果ObservableList任何更改, MyAdapter将相应更改而不会完全刷新 如果我想显示完全不同的相同项types集,我可以重新设置bindingvariables,因此将再次调用MyAdapter并完全更改MyAdapter项。 例如,如果我想显示Gametypes的项目,我有两个不同的列表:“拥有游戏”和“愿望列表游戏”,我可以调用binding.setItems(whateverItems)来完全刷新显示的项目,但是例如如果我在列表周围移动“愿望清单游戏”以按相关性组织它们,则只会在每个列表中执行微更改而不刷新整个事物。 事实certificate这个想法是不可行的,因为每次对ObservableList进行一次更改时,数据绑定都会重新执行BindingAdapter ,所以例如我观察到了以下行为: 我从一个空的MyAdapter开始 从我的API获取项目时,我实例化一个ObservableArrayList包装它们并将其传递给binding 数据绑定调用我的BindingAdapter将项目传递给MyAdapter 当MyAdapter收到新项目时,它清除旧项目并将OnListChangedCallback添加ObservableList收到的ObservableList以处理微更改 如果ObservableList任何更改,则再次调用MyAdapter ,因此MyAdapter会再次接收整个列表并完全刷新。 这种行为对我来说似乎很破碎,因为防止ObservableList在数据绑定的xml可用。 我不能认真地弄清楚这种行为是可取的合法案例。 我查了一些例子: […]

数据绑定 – safeUnbox警告

将AS gradle版本升级到2.3.0后,数据绑定会遇到警告: 警告:selectMap [index]是一个盒装字段,但需要取消装箱才能执行selectMap [index]? @android:颜色/白色:@android:颜色/透明。 这可能会导致NPE,因此数据绑定将安全地取消它。 您可以更改expression式并使用safeUnbox()显式地包装selectMap [index]以防止出现警告 selectMap是一个ObservableMap,然后我搜索这个警告,但只进行了一些讨论,并没有解决它 Android Studio 2.3.0-alpha1:Databinding + int拆箱会导致编译错误 数据绑定 – API 15-18上的数据对象为空 我按照链接的方式,将selectMap[index]修改为safeUnbox(selectMap[index])但语法错误。 所以任何人都知道如何修复此警告? 编辑:这是xml文件代码 viewModel.onItemSelectListener(selectMap, index)}” android:orientation=”vertical” android:padding=”20dp”> 构建成功,但警告出来(我在上面)。

如何在Dialog中使用数据绑定?

我在Dialog中实现数据绑定时遇到了麻烦。 可能吗? 下面是我的xml。 我想在Dialog中绑定上面的布局。 这怎么可能? 下面是我试过的java代码,但它不起作用 dialog.setContentView(R.layout.dialog_ola_booking_confirmed); DialogOlaBookingConfirmedBinding binding = DataBindingUtil.inflate( LayoutInflater.from(dialog.getContext()), R.layout.dialog_ola_booking_confirmed, (ViewGroup) dialog.findViewById(R.id.cv), false); ViewModel viewModel = new ViewModel(this, event.olaBooking);

Android数据绑定:包含标记的可见性

根据http://developer.android.com/tools/data-binding/guide.html#imports ,我们可以在可见性中使用这样简单的expression式: 但是,当我尝试在include标记中执行相同操作时,如下所示: 然后Studio不仅以红色显示expression式,而且在构建时它会在自动生成的绑定类中显示以下错误: 错误:(138,29)错误:找不到符号方法setVisibility(int) 这是自动生成的绑定类中发生错误的位置 // batch finished if ((dirtyFlags & 0x3L) != 0) { // api target 1 this.imageLayout.setVisibility(NotifTypeNotificatio1); } imageLayout.executePendingBindings();