问题标签 [android-binding-adapter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1772 浏览

android - BindingAdapter LiveData 第一个值始终为 null

我正在尝试处理函数中的LiveData值 ( profilePicture: Bitmap),BindingAdapter但第一个值始终为null。绑定适配器是一个ViewSwitcherwithProgressBarImageView

像这样从firebase获取个人资料图片:

因为第一个值是null而第二个是预期的位图对象,所以view.showNext()被调用了两次。但对我来说更重要的是要理解为什么 firstvalue 为null,因为该setProfilePicture方法会有更多的逻辑。

BindingAdapter 看起来像这样。

日志:

0 投票
1 回答
658 浏览

android - 无法使用 Android 绑定在 RecyclerView 上绑定 RatingBar

我正在使用 kotlin 绑定放置在 RecyclerView 上的 RatingBar,但出现以下错误:

在 android.widget.RatingBar 上找不到参数类型为 java.lang.Double 的属性“app:ratingValue”的设置器。

在此处输入图像描述

我尝试关注不同的博客来设置RatingBar的值,但我无法在适配器中实现它。

下面是我的模型类:

然后,这是可绑定的 XML 布局:

然后这是我的适配器类:

我认为在 中遗漏了一些东西onBindViewHolder(),但找不到,我遗漏了什么?

0 投票
1 回答
186 浏览

android - 在数据绑定属性中传递类类型

我们可以在android数据绑定中做这样的事情吗

用于绑定适配器

0 投票
1 回答
708 浏览

android - 带有 ViewModel 的文本观察器绑定适配器

我对所有这些 MVVM 和 Android 架构组件还是新手。我有几个屏幕(登录和注册),其中包含电子邮件、密码、姓名等的输入,以及仅在正确填写必填字段时启用的“继续”按钮。还有诸如“密码必须是……”和“不是有效的电子邮件……”等消息的文本视图。我正在尝试使用绑定适配器和视图模型将一些验证逻辑从我的 MainActivity 中拉出并远离我的业务逻辑,但我很挣扎。我什至不确定这是否是最好的方法。我对 ViewModel 的想法是,它会在旋转/活动更改时保持其状态。

RegisterActivity 是一个 Activity,它只包含一个带有 3 个片段(电子邮件/密码、名字/姓氏、验证码)的 ViewPager。

绑定适配器

布局

视图模型

这只是我的一个测试。我的想法是我可以将 TextView 可见性绑定到一个布尔值,我可以使用 onTextChanged 侦听器进行切换/操作,但我不知道如何连接绑定适配器。我在正确的道路上吗?有没有更好/更简单的方法来做到这一点?

0 投票
0 回答
60 浏览

android - Android:视图扩展和实现的自定义绑定适配器

我正在尝试为扩展View和实现的通用视图构建自定义绑定适配器CheckableRadioButton是一个例子,但我想让它通用,以便它与其他可检查的视图一起使用。

如果我使用 RadioButton 它确实可以工作,但是,如果我使用<T> where T: View, T: Checkable编译器失败并出现以下错误:data binding error ****msg:Cannot find the setter for attribute 'bind:checked' with parameter type

这是我失败的尝试:

如果我使用 RadioButton 而不是 T,它可以工作。

有没有办法使这个通用?

0 投票
5 回答
9345 浏览

android - 数据绑定和 MutableLiveData 的问题

2019 年 11 月更新 - 它现在在最新版本上按预期工作。

原帖:

我正在通过公开公开的函数 setRefreshing(应用程序:XML 中的刷新)将 MutableLiveData 绑定到我的 SwipeRefreshLayout 并且当时一切正常......但是让我们介绍一下我的应用程序架构。

当我根据刷新状态更改其值时,我有带有 MutableLiveData 的抽象 ViewModel。

然后我有两个从这个抽象继承的 ViewModel(让我将它们命名为 FirstViewModel 和 SecondViewModel),命名为 BaseRefreshViewModel。首先,我有两个几乎相同的 XML 文件,仅在第一个 XML 中导入 FirstViewModel 和第二个 - 对应的 SecondViewModel 时与“数据”节点不同。

我太可怕了,所以我将它合并到一个 XML 中并导入这个 BaseRefreshViewModel (list_layout.xml):

然后编译器开始发疯 - 它说:

好的,所以我编写了自己的 BindingAdapter(当然在 SwipeRefreshLayout 中更改为 app:refresh):

仍然是同样的问题,然后我将 BindingAdapter 更改为:

它开始编译,但在运行我的应用程序后出现错误:

没有狗屎夏洛克...有趣的是,当我将 XML 文件中的导入从 BaseRefreshViewModel 更改为 FirstViewModel/SecondViewModel 时,即使没有我的 BindingAdapter,它也开始编译得很好(我当然不能这样,因为我有一个不同的列表我绑定到我的适配器的 ViewModels 中的对象)。

这是我在片段中的 ViewModel 初始化:

和 ViewModel 本身:

如何在不返回创建两个导入了不同 ViewModel 的 XML 文件的情况下超越这一点?

我使用 Android Studio 3.5 Beta 5 只是为了利用 DataBinding 改进的错误消息。

更新:

当我将 MutableLiveData 更改为 ObservableBoolean() 时,它编译并运行良好......但我不想坚持这一点,我想使用 LiveData 及其生命周期优势。它只是显示了我认为现在数据绑定编译器是如何被窃听的。

概括:

WORKING(两个不同的xml,几乎一样)

  • BaseRefreshViewModel (isRefreshing: MutableLiveData)
    • 第一视图模型
      • first_list_layout.xml(导入 FirstViewModel)
    • 第二视图模型
      • second_list_layout.xml(导入 SecondViewModel)

工作(一个 xml 文件,但不是 LiveData)

  • BaseRefreshViewModel (isRefreshing: ObservableBoolean)
    • 第一视图模型
      • list_layout.xml(导入 BaseRefreshViewModel)
    • 第二视图模型
      • list_layout.xml(导入 BaseRefreshViewModel)

不工作(一个带有 LiveData 的 xml 文件)

  • BaseRefreshViewModel (isRefreshing: MutableLiveData)
    • 第一视图模型
      • list_layout.xml(导入 BaseRefreshViewModel)
    • 第二视图模型
      • list_layout.xml(导入 BaseRefreshViewModel)
0 投票
2 回答
1265 浏览

android - Kotlin RecyclerView DataBindingAdapter 不知道为什么会报错

我想将 imageview 与数据绑定适配器结合起来。我在谷歌上搜索我的问题。问题是 databindingadapter 在我的 XML 中不起作用。

说的简单点,其他的视图识别得很好,比如textView。如果我在 ImageView 输入变量名,颜色应该会改变,但不会改变。

这是我的代码 <data class> (databindingadapter)

XML 代码

这是我的 recyclerview 适配器类

我将此代码移至另一个类 ex) mainactivity,listadapter,但它不起作用。

我编写了其他有关数据绑定适配器的视频或文档中描述的代码。

0 投票
1 回答
68 浏览

android - 使用 kotlin 在 Android 中创建客户绑定适配器时出错

我已经声明了一个 bindingadapter,如下所示:

我在 xml 中使用它作为

但是当我尝试构建时,我收到以下错误:

如果有人能帮我解决这个问题,我会很感激吗?

0 投票
1 回答
1165 浏览

kotlin - 如何使用 BindingAdapter 从其绑定对象中的 LiveData 值获取 RecyclerView 项以更新自身?

我有一个 recyclerview.widget.ListAdapter 在网格中显示一些卡片。当我点击一张卡片时,它会来到网格的前面,翻转,当你看到前面时,你应该会喜欢它。我在卡片正面的角落有一个 ImageView,它应该在喜欢与否之间切换,显示我已经定义的不同的可绘制对象。

我的 ViewHolder 看起来像这样:

我的 item_game_card.xml 看起来像这样:

我的 BindingAdapters.kt:

还有我的 ProductCard.kt:

当我点击 ImageView 时,控制台每次都正确打印出前后值,所以我知道likedLiveData 的值实际上是在变化的,但是 View 没有相应地更新,那是因为绑定适配器只是被调用一次(binding.executePendingBindings()我猜是当 RecyclerView 绑定 ViewHolder 时,而不是每次 LiveData 更改时)。

我希望每次likedLiveData 更改时都运行 BindingAdapter 代码。

当我使用 ViewModel 和 Fragment 布局执行此操作时,每次 ViewModel 中的 LiveData 更改时,View 都会更改,因为 xml 正在引用该 LiveData,但我不知道为什么,当涉及到 ProductCard 和 recyclerview 项目布局时,即使xml 引用的是 LiveData,View 没有改变,xml 实际上并没有绑定到 LiveData,这是拥有 LiveData 的全部意义。

我已经用一种非常粗鲁、不雅的方式实现了这种行为,在该视图上设置了一个 onClickListener,并强制它在 OnBindViewHolder 上更改它的资源可绘制,如下所示:

但我真的希望每张卡片的行为都由它所绑定的 ProductCard 对象的状态来控制。

我也试过binding.executePendingBindings()每次点击都强制打电话,但也没有用。

如何让 item_game_card.xml 观察 LiveData 的变化?

0 投票
0 回答
106 浏览

android - 奇怪的绑定适配器点击监听行为kotlin android

我遇到了以前从未遇到过的奇怪行为。我正在尝试使约束布局可单击,因此我有一个绑定适配器来初始化单击侦听器。

约束布局不听我的点击。一次偶然的机会,我创建了线性布局,将app:clickListener="@{1}"约束布局移到了线性布局。这将起作用并且会听到点击。如果我删除线性布局并添加app:clickListener="@{1}"到 Textview 或 ImageView 或两者中,也会听到点击。无论在根级别如何,它都不起作用。

对此有解释吗?我试图摆脱线性布局,因为它向视图添加了一个层,但这是我必须使它工作的唯一方法,请注意,我只会在这种情况下使用绑定适配器。