android - Android 架构组件
问题描述
我正在为我的应用程序使用 MVVM android 架构。
我想实现点击事件,那么,我们是否需要使用数据绑定架构组件,或者我们可以只使用活动来处理点击事件并验证用户输入?
实现这一点的最佳方法是什么?
解决方案
那么问题将是使用Databinding
与否。以下是一些优点和缺点Databinding
:
优点:
- 使代码超级干净。
- 使代码更短。
- 易于测试。
缺点:
- 有时很难调试。
- 它有点重,增加了编译时间。
但是......既然Google
已经宣布它是 Android 架构组件的一部分,我相信你应该使用它。
实现这一点的最佳方法是什么?
我不知道你对 Binding Adapters 有多熟悉,Databinding
但你应该知道一些关于Binding Adapters的知识,因为onClick
你不需要它。只需android:onClick
在 XML 文件中添加属性。你也可以找到这个 Codelab 来正确实现它:
https://codelabs.developers.google.com/codelabs/android-databinding/#0
例子:
首先确保你Databinding
在你的build.gradle
android {
...
dataBinding {
enabled true
}
}
之后转到布局,您将使用数据绑定(并为此确保它将是一个活动/片段),只需在您的IDE 中键入 ALT+TAB ,然后......
之后,定义类型,例如 aViewModel
及其名称。在将使用点击功能的视图中添加我上面所说的内容。( android:onClick="@{() -> viewmodel.onLike()}"
)
你还没有完成。您将需要以某种方式将您的逻辑连接到该数据绑定,因此请转到您的 Activity/Fragment 的 Java/Kotlin 代码并:
替换setContentView(R.layout.some_activity)
为val binding : SomeActivityBinding =
DataBindingUtil.setContentView(this, R.layout.some_activity)
请注意,SomeActivityBinding
将由 IDE 本身提供,因为它是Databinding
根据 xml 命名在库上处理的。
这是最基本的。祝你好运。
推荐阅读
- python - AttributeError:“L2bpfSocket”对象没有属性“ins”
- tizen - 如何要求 genlist 仅显示
- python - Python 根据第一个列表中的 .pop() 更新第二个列表中的字符串元素
- ios - SCNParticleSystem 以错误的方式部分隐藏或遮挡
- c# - 无法使用依赖注入打开数据库
- c - (int)a 和 *(int*)&a 有什么区别
- android - 如何将视图模型绑定到 SupportMapFragment
- python - 没有从网页获取所有链接
- vue.js - 在App.vue中绑定一个字符串,修改后不会更新
- c++ - 在 C++ 中导出父类和基类