问题标签 [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.
android - BindingAdapter LiveData 第一个值始终为 null
我正在尝试处理函数中的LiveData
值 ( profilePicture: Bitmap
),BindingAdapter
但第一个值始终为null。绑定适配器是一个ViewSwitcher
withProgressBar
和ImageView
。
像这样从firebase获取个人资料图片:
因为第一个值是null而第二个是预期的位图对象,所以view.showNext()
被调用了两次。但对我来说更重要的是要理解为什么 firstvalue 为null,因为该setProfilePicture
方法会有更多的逻辑。
BindingAdapter 看起来像这样。
日志:
android - 在数据绑定属性中传递类类型
我们可以在android数据绑定中做这样的事情吗
用于绑定适配器
android - 带有 ViewModel 的文本观察器绑定适配器
我对所有这些 MVVM 和 Android 架构组件还是新手。我有几个屏幕(登录和注册),其中包含电子邮件、密码、姓名等的输入,以及仅在正确填写必填字段时启用的“继续”按钮。还有诸如“密码必须是……”和“不是有效的电子邮件……”等消息的文本视图。我正在尝试使用绑定适配器和视图模型将一些验证逻辑从我的 MainActivity 中拉出并远离我的业务逻辑,但我很挣扎。我什至不确定这是否是最好的方法。我对 ViewModel 的想法是,它会在旋转/活动更改时保持其状态。
RegisterActivity 是一个 Activity,它只包含一个带有 3 个片段(电子邮件/密码、名字/姓氏、验证码)的 ViewPager。
绑定适配器
布局
视图模型
这只是我的一个测试。我的想法是我可以将 TextView 可见性绑定到一个布尔值,我可以使用 onTextChanged 侦听器进行切换/操作,但我不知道如何连接绑定适配器。我在正确的道路上吗?有没有更好/更简单的方法来做到这一点?
android - Android:视图扩展和实现的自定义绑定适配器
我正在尝试为扩展View
和实现的通用视图构建自定义绑定适配器Checkable
。RadioButton
是一个例子,但我想让它通用,以便它与其他可检查的视图一起使用。
如果我使用 RadioButton 它确实可以工作,但是,如果我使用<T> where T: View, T: Checkable
编译器失败并出现以下错误:data binding error ****msg:Cannot find the setter for attribute 'bind:checked' with parameter type
这是我失败的尝试:
如果我使用 RadioButton 而不是 T,它可以工作。
有没有办法使这个通用?
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)
- 第一视图模型
android - Kotlin RecyclerView DataBindingAdapter 不知道为什么会报错
我想将 imageview 与数据绑定适配器结合起来。我在谷歌上搜索我的问题。问题是 databindingadapter 在我的 XML 中不起作用。
说的简单点,其他的视图识别得很好,比如textView。如果我在 ImageView 输入变量名,颜色应该会改变,但不会改变。
这是我的代码
<data class> (databindingadapter)
XML 代码
这是我的 recyclerview 适配器类
我将此代码移至另一个类 ex) mainactivity,listadapter,但它不起作用。
我编写了其他有关数据绑定适配器的视频或文档中描述的代码。
android - 使用 kotlin 在 Android 中创建客户绑定适配器时出错
我已经声明了一个 bindingadapter,如下所示:
我在 xml 中使用它作为
但是当我尝试构建时,我收到以下错误:
如果有人能帮我解决这个问题,我会很感激吗?
kotlin - 如何使用 BindingAdapter 从其绑定对象中的 LiveData 值获取 RecyclerView 项以更新自身?
我有一个 recyclerview.widget.ListAdapter 在网格中显示一些卡片。当我点击一张卡片时,它会来到网格的前面,翻转,当你看到前面时,你应该会喜欢它。我在卡片正面的角落有一个 ImageView,它应该在喜欢与否之间切换,显示我已经定义的不同的可绘制对象。
我的 ViewHolder 看起来像这样:
我的 item_game_card.xml 看起来像这样:
我的 BindingAdapters.kt:
还有我的 ProductCard.kt:
当我点击 ImageView 时,控制台每次都正确打印出前后值,所以我知道liked
LiveData 的值实际上是在变化的,但是 View 没有相应地更新,那是因为绑定适配器只是被调用一次(binding.executePendingBindings()
我猜是当 RecyclerView 绑定 ViewHolder 时,而不是每次 LiveData 更改时)。
我希望每次liked
LiveData 更改时都运行 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 的变化?
android - 奇怪的绑定适配器点击监听行为kotlin android
我遇到了以前从未遇到过的奇怪行为。我正在尝试使约束布局可单击,因此我有一个绑定适配器来初始化单击侦听器。
约束布局不听我的点击。一次偶然的机会,我创建了线性布局,将app:clickListener="@{1}"
约束布局移到了线性布局。这将起作用并且会听到点击。如果我删除线性布局并添加app:clickListener="@{1}"
到 Textview 或 ImageView 或两者中,也会听到点击。无论在根级别如何,它都不起作用。
对此有解释吗?我试图摆脱线性布局,因为它向视图添加了一个层,但这是我必须使它工作的唯一方法,请注意,我只会在这种情况下使用绑定适配器。