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

android - 通过 gradle 分发库后,我在库模块中创建的 BindingAdapter 无法从任何应用程序模块访问

我最近创建了一个库,并在其中创建了一个类似于下面的 BindingAdapter(只是在 TextView 上装饰文本)。

可以从同一个 Android Studio 项目中的应用模块访问此 BindingAdapter,如下所示

但是在我通过 jcenter 分发库,并通过 gradle 从不同的应用程序项目中导入库后,我无法使用"app:decorateText"标签。

我得到了以下错误。

我可以从应用程序中调用该库的公共方法,因此该库看起来已正确导入到项目中。

是否有任何技巧可以使库中的 BindingAdapter 可从应用程序模块访问,还是不可能?

0 投票
1 回答
4101 浏览

android - Android 数据绑定 ObservableList 行为问题

我发现很难发现android.databinding.ObservableList作为数据绑定功能的真正存在理由。

起初它看起来像是一个很酷的工具来显示列表,通过数据绑定,将它们添加xmlRecyclerView. 为此,我制作了一个这样的BindingAdapter

这样,我可以使用带有集合的属性app:items来更新它的项目。RecyclerViewMyAdapter

现在最好的功能ObservableList是您可以向其中添加一个OnListChangedCallback,它可以处理与RecyclerView添加/移动/删除/更改其中的项目相同的事件,而无需实际重新加载整个列表。

所以我想实现的逻辑是:

  1. 我从一个空的开始MyAdapter
  2. 当从我的 API 中获取我的项目时,我会实例化一个ObservableArrayList包装它们并将其传递给binding
  3. 数据绑定调用我BindingAdapter将项目传递给MyAdapter
  4. MyAdapter收到新项目时,它会清除旧项目并在收到的项目中添加一个OnListChangedCallbackObservableList处理微更改
  5. 如果 , 中有任何变化ObservableListMyAdapter将相应地改变而不完全刷新
  6. 如果我想显示一组完全不同的相同项目类型,我可以重新设置binding变量,因此BindingAdapter将再次调用并且MyAdapter项目将完全改变。

例如,如果我想显示Game我有两个不同列表的类型的项目:“拥有的游戏”和“愿望清单游戏”,我可以调用binding.setItems(whateverItems)以完全刷新显示的项目,但是例如,如果我移动“愿望清单”游戏”围绕列表进行按相关性进行组织,每个列表中只会执行微小的更改,而不会刷新整个列表。

BindingAdapter事实证明这个想法是不可行的,因为每次对 a 进行一次更改时,数据绑定都会重新执行ObservableList,因此例如我观察到休闲行为:

  1. 我从一个空的开始MyAdapter
  2. 当从我的 API 中获取我的项目时,我会实例化一个ObservableArrayList包装它们并将其传递给binding
  3. 数据绑定调用我BindingAdapter将项目传递给MyAdapter
  4. MyAdapter收到新项目时,它会清除旧项目并在收到的项目中添加一个OnListChangedCallbackObservableList处理微更改
  5. 如果 中发生任何变化ObservableListBindingAdapter则再次调用 ,从而再次MyAdapter接收整个列表并完全刷新。

这种行为对我来说似乎很糟糕,因为它阻止了ObservableList在 data-bound 中可用xml。我无法认真找出这种行为是可取的合法案例。

我查了一些例子:here and this other SO question

在第一个链接中,所有示例都ObservableList直接使用了Adapter,甚至没有传递表单xml和实际数据绑定,而在 SO 答案中链接的代码中,开发人员基本上做了我尝试做的事情,添加:

在他开始时,他Adapter.setItems(ObservableList<T> items)丢弃了所有由于ObservableList.

这种行为的需要是什么?在哪些情况下可能需要这种行为?我觉得ObservableList这是一个添加到数据绑定的功能,并且非常有用,除非与实际数据绑定一起使用,在这种情况下,它会迫使你保护它的行为。List如果我在xml数据标签和签名中都将它声明为简单BindingAdapter,那么我可以将它转换回ObservableList内部MyAdapter并且它工作得很好,但这是一个非常糟糕的黑客攻击。如果它只是数据绑定的一个单独功能,而不是在每次更改时触发绑定,我认为它会好得多。

0 投票
2 回答
1363 浏览

android - Android BindingAdapter 错误。NonExistentClass

这是我的 BindingAdapter

我在我的 gradle 上添加了 RecyclerView 依赖项:

这是我在布局中的使用方式:

在扩展此布局后,我已经设置了 viewModel 绑定变量。但是每当我运行我的代码时,gradle 总是显示以下错误

app:lastAdapter我可以通过从我的布局中删除任何内容然后清理并重建,app:lastAdapter再次重写这些属性然后重建项目来解决这个问题,一切正常。

这不是一个方便的解决方案。

0 投票
2 回答
2096 浏览

android - Android 数据绑定适配器不工作

我在 Binding Utils 类中有这个适配器:

这是我的一个 xml 文件的一部分:

问题是在 Android Studio 2.2.3 版本中运行良好。当我更新到 Android Studio 2.3 时,它停止工作并且 Gradle 显示多个错误。我已将绑定适配器和反向绑定适配器的属性从“android:text”更改为“text”,但它不起作用。另一个用户在这个问题中发生了类似的事情:升级到 Gradle 2.3 后数据绑定中断,但不同之处在于我使用“android:text”进行绑定,所以 George Mount 给出的答案对我不起作用。有人有什么想法吗?我对此感到非常沮丧,因为由于这个问题我无法更新 Android Studio。

0 投票
1 回答
372 浏览

android-recyclerview - 在不同的 recyclerViews 中访问相同的 ViewModel

Activity A 和 B 包含一个 RecyclerView 并保存类似类型的数据,因此它们使用称为 AViewModel 的通用视图模型

活动 A.java

活动 B.java

现在启动 Activity A 应用程序崩溃并显示

AdapterA 不能转换为 AdapterB

怀疑 setAdapter 的类似方法签名。有什么建议可以解决问题的原因吗?

错误日志

E/AndroidRuntime:致命异常:主进程:com. .hackthon.listviewpoc,PID:308 java.lang.ClassCastException:com。.hackthon.listviewpoc.AdapterA 无法转换为 com。.hackthon.listviewpoc.AdapterB 在 com.hackthon.listviewpoc.ActivityB.setAdapter(ActivityB.java:39) 在 com.hackthon.listviewpoc.databinding.ActivityABinding.executeBindings(ActivityABinding.java:145) 在 android.databinding.ViewDataBinding。

0 投票
1 回答
1351 浏览

android - Android 数据绑定微调器适配器

我必须写一个@BindingAdapter接受 Spinner 和EnumSet<T>

我有一个问题,因为如果Spinner项目的文本太长而无法放入一行,则文本不会被换行而是像这样被切断:

在此处输入图像描述

谁能告诉我应该在哪里以及我应该改变什么来换行?

0 投票
1 回答
1556 浏览

android - 自定义组件的Android双向数据绑定?

我正在尝试按照博客文章尝试获取两种方式的数据绑定以适用于自定义组件(其中包含 EditText 的约束视图)。

我能够让两个标准 EditText 组件与我的模型同步(两种方式),但是我无法让我的自定义组件中的更改流入我的模型(尽管数据绑定的一种方式有效)。

我的模型:

活动:

自定义组件:

我认为那篇文章中的“挂钩事件”部分完全超出了我的想象。我真的只需要一个简单的组件的 setter 和 getter,所以不能完全理解 BindingAdapter 中正在做什么。在所有这些中,我认为这是我根本没有得到的这条线:

演示:https ://github.com/indgov/data_binding

0 投票
1 回答
720 浏览

android - 为 RecyclerView 调用 getMeasuredWidth() 或 getWidth() 在数据绑定上返回 0

我正在使用数据绑定来设置一个RecyclerView. 这是绑定适配器:

getSpanSizeFromScreenWidth需要回收站的宽度来做一些计算。但它总是返回0

我试图应用ViewTreeObserver这样的:

或者post像这样使用:

getSpanSizeFormScreenWidth 的代码:

0但尽管我RecyclerView显示在屏幕上(不是0),它仍然会返回。

有任何想法吗?

0 投票
1 回答
1288 浏览

android - 无法将硬编码的字符串值传递给 Kotlin 中的 @BindingAdapter

将我的 Android 应用 Java 代码转换为 Kotlin,我正在使用数据绑定将自定义字体设置为 TextViews。我曾经从 XML 传递字体字符串,如下所示

app:customFont="@{'harmonia-semibold.ttf'}"

将 @BindingAdapter 转换为 kotlin 后,上面的行不起作用,并且预期会抛出 expr 或 lambda 表达式,出现“””错误。用 getter 方法替换硬编码的字符串值效果很好。下面是我的绑定适配器,不知道为什么它不采用硬编码字符串

谢谢

0 投票
3 回答
4627 浏览

android - 数据绑定适配器。如何通过 id 参考获取视图?

我想将视图引用指定为属性ImageView

但是我的进度视图为空。我尝试将上下文转换为活动,并且findViewById还为空另一个解决方案只是在图像下方添加进度视图,当它成功加载时,它应该被覆盖 bt 图像