问题标签 [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 投票
0 回答
192 浏览

android - Android RecyclerView 滚动时无法正确计算 TextView MeasuredHeight

这可能是stackoverflow中关于Android RecyclerView的最常见问题,但我在任何地方都找不到任何合适的解决方案来满足我的要求。

我的问题

我正在使用带有 Room Database 和 Retrofit 的分页库来填充 Recyclerview 中的内容。有两个 VIEW_TYPE;一个是卡片视图中的实际数据,另一个是进度条布局,当调用 API 以获取下一组数据时,它会显示在 Recyclerview 的底部。列表中的每个卡片视图都相当复杂,包含图像和文本。

一切正常,直到我在内容混乱时开始向上滚动。准确地说,一个 textview 需要根据另一个 textView 的测量高度来显示。在我向下和向上滚动后,测量的高度没有正确显示。图片截图附在下面

我发现几乎每个人都建议有 2 个解决方案。

  1. 覆盖适配器中的 getItemViewType(int position) 并返回位置

    ~ 我不能使用这个解决方案,因为我必须保留 2 个 VIEW_TYPES。我的 getItemViewType 代码如下:

    public int getItemViewType(int position) { if (hasExtraRow() && position == getItemCount() - 1) { return R.layout.item_network_state; } else { return R.layout.card_post_timeline; } }

  2. 在 ViewHolder 中使用setIsRecyclable(false)

~ 如果我使用这个解决方案,它可以解决我的问题,但我不想使用它,因为这违背了 Recyclerview 的全部目的,并且在有大数据集时会严重影响性能。

我的代码

问题

我们可以使用什么替代方案来解决这个古老的 Recyclerview 问题?

更新 -

唯一的问题是“显示更多”文本视图可见性是由 postBody 文本视图测量的高度计算的。向下然后向上滚动后,无论文本内容如何,​​Textview 的测量高度总是相同。

相同的逻辑如下:

0 投票
3 回答
5640 浏览

android - 如果绑定适配器提供了 getter,请检查适配器是否正确注释以及参数类型是否匹配

我对 Android 中的 databindig 有一点问题。我想通过 databindig 设置 ImageView 的可见性,并且我认为我已经完成了所有可以在 Android 博客上找到的与数据绑定相关的事情,尽管我收到了构建错误消息。

我的布局 XML 文件如下:

还有我的 ViewModel 类:

我无法找出问题所在...

完整的错误日志:

0 投票
1 回答
101 浏览

android - 如何避免在 BindingAdapter 中显式调用 findDrawableByLayerId 和 getDrawable

用例有一个 DatabindingAdapter,它相应地更改 viewHolder 项的 Drawable 颜色。

在 XML 部分:

这工作得很好,但我想通过不明确调用findDrawableByLayerId来优化更多,R.drawable.background_corner_right

无论如何我可以将这些在 Xml 中作为参数传递到 BindingAdapter 中吗?这将使 BindingAdapter 更加通用和可重用

0 投票
1 回答
485 浏览

android - 视图上具有可观察实例字段的双向数据绑定?

使用 Android 双向数据绑定时,我是否必须在上使用 staticBindingAdapter或者View是否可以简单地使用可观察的实例字段?在文档中,我总是只在ViewModels 上看到可观察字段,而不是在View. 我尝试在我View的 with上实现可观察字段

但是当我编译这个(./gradlew assembleDebug --stacktrace获取详细信息)时,它失败了

那么,是否可以View像在双向数据绑定上那样使用可观察字段ViewModel?我想使用可观察字段而不是 staticBindingAdapter的原因是我View有一些比我可以处理的更复杂的逻辑/状态BindingAdapter(好吧,从静态BindingAdapter我可以调用到myViewInstance.myValue,但不知何故我感觉不对)

更新

我构建了一个最小(非)工作示例,可在 Github 上找到 。默认情况下,它使用单向绑定,效果很好。改变

inactivity_main.xml将导致信息量不大的编译错误。用于./gradlew assembleDebug --stacktrace获得长输出,其中包括

谁能看看这个,让我知道我做错了什么?

0 投票
1 回答
58 浏览

android - 以编程方式向 RecyclerView 项添加一些视图会创建一个已知错误

因此,我正在创建一个待办事项应用程序,用户可以在其中设置优先级,并且通过绑定适配器以编程方式添加优先级星,但是当滚动任务回收器视图时,星数为零的任务也显示星数,其中检查日志显示零星。此外,仅当我滚动到带有星星的项目然后开始严格滚动时才会出现此错误

  1. 应用程序刚刚启动

在此处输入图像描述

  1. 滚动到带有任务星的项目

在此处输入图像描述

  1. 严格滚动后

在此处输入图像描述

我试过创建新的 ArrayList 每次更新项目

片段代码:

RecyclerView 绑定代码:

添加星星的 BindingAdapter 函数:

0 投票
2 回答
2553 浏览

android - Android 数据绑定 - 找不到接受参数类型“long”的 <> 的 getter

在过去的几周里,我一直在使用数据绑定,现在正在尝试对具有“值”属性的自定义视图使用双向数据绑定。

我的问题是在构建时出现以下错误。

找不到接受参数类型“long”的 <com.twisthenry8gmail.dragline.DraglineView app:value> 的吸气剂

现在我的理解是绑定库将自动使用我的公共设置器和获取器,但是最令人困惑的部分是添加冗余的反向绑定适配器似乎可以解决问题?所以我得到的印象是它使用我的 setter 而不需要适配器,但 getter 不是这种情况?

我的自定义视图

我在布局文件中的视图

我看似多余的适配器

我的属性改变了适配器

0 投票
1 回答
1664 浏览

android - 如何为 material.Slider 视图创建绑定适配器?

我的目标是 2 路数据绑定材料。从我的视图模型到 MutableLiveData 的滑块视图:

当然,它不起作用,因为 androidx.databinding 库中没有 Slider 的数据绑定适配器

但是,他们有一个用于 SeekBar:/androidx/databinding/adapters/SeekBarBindingAdapter.java

据我了解,2 向数据绑定应该只适用于“progress”属性,而 1 向数据绑定需要两个属性:“onChanged”和“progress”

我尝试为 Slider 调整 SeekBarBindingAdapter:

它不是在建造:

但是如果我只使用它为什么会寻找 valueAttrChanged

?

如果在 Slider 类中看不到 valueAttrChanged,如何找到要添加到 BindingAdapter 的正确属性?

0 投票
1 回答
251 浏览

android - Android双向数据绑定数据转换器不起作用

https://developer.android.com/topic/libraries/data-binding/two-way#converters之后,
我正在尝试在 android 中实现双向数据绑定的数据转换器。

转换器的功能:
给定一个 10 位数的电话号码,将国家代码添加到电话号码。

XML 代码:

转换器:

当我在 XML 中添加转换器时,构建失败。未找到获取 MyLayoutBindingImpl。绑定类生成问题。

注意:
1.双向数据绑定按预期工作,问题仅与转换器有关。

已参考:
双向数据绑定转换器

编辑:

感谢@Hasif Seyd 的解决方案。

工作代码:

电话号码字符串转换器:

XML:

改为。addExtension_removeExtension

0 投票
0 回答
283 浏览

android - 在动态功能模块中找不到@BindindAdapter

我在应用程序模块中有扩展功能

它在应用程序模块的布局中使用时工作正常,但是当从动态功能模块中的相同布局调用它时,会导致下面的编译错误

使用此绑定的布局

0 投票
1 回答
303 浏览

java - 数据绑定,MaterialCardView 应该像 Radiogroup

我正在尝试实现两个应该像 Radiogroup 一样的 MaterialCardViews。因此,如果我单击一个,则应取消选中另一个。我正在使用 viewModel、liveData 和自定义双向数据绑定来保存这些值以供以后使用(通过电子邮件发送)。

我成功编写了 .xml 并实现了检查逻辑,但我很难实现取消检查逻辑。

XML,用于更好可见性的简短版本

视图模型

CardViewAdapter.kt

我感谢每一个帮助,非常感谢!

PS:如果有更好更简单的方法来实现这一点,例如告诉视图中的viewModel保存isChecked,请通知我。MaterialCardView 默认实现了“isChecked”,但没有逻辑。