我已经开发了基于android数据绑定库的应用程序:https://developer.android.com/topic/libraries/data-binding/index.html
class SignInViewModel extends BaseObservable {
@Bindable
public String getLogin() {
return login;
}
@Bindable
public String getPassword() {
return password;
}
}
现在我想从新的库中使用ViewModelProviders:https://developer.android.com/topic/libraries/architecture/guide.html
SignInViewModel signInViewModel = ViewModelProviders.of(this).get(SignInViewModel.class);
它是如何结合的?有什么想法吗?还是应该将这两个库合并?
编辑
我改为:
class SignInViewModel extends ViewModel {
public ObservableField<String> login = new ObservableField<>("");
public ObservableField<String> password = new ObservableField<>("");
}
现在编译,但问题是:这是正确的方法吗?
它可能与Android Studio 3.1金丝雀6(https://androidstudio.googleblog.com/2017/12/android-studio-31-canary-6-is-now.html):
现在可以在数据绑定表达式中使用LiveData对象作为可观察字段。ViewData绑定类现在包含了一个新的setLifeycle方法,您需要使用该方法来观察LiveData对象。
你可以在这篇媒体文章中找到更多的细节和样本。
也许当这个问题被问到的时候,这并不存在,但是在这篇文章中解释了另一个选择:https://medium.com/google-developers/android-data-binding-observability-9de4ff3fe038
基本上,您可以实现android,而不是从BaseObservable扩展。数据绑定。可见的。
由于您还需要执行以下操作,因此需要做更多的工作:
>
在模型类中创建此变量
private PropertyChangeRegistry registry = new PropertyChangeRegistry();
实现这样的重写方法
@Override
public void addOnPropertyChangedCallback(OnPropertyChangedCallback callback) {
registry.add(callback);
}
@Override
public void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback) {
registry.remove(callback);
}
将所有“BR”呼叫替换为以下内容:
registry.notifyChange(this, BR.bar);
其他一切都与从BaseObservable扩展相同。所以我认为这可能是Jose提到的解决方案,但当时可能没有。它似乎起作用了。
更新:正如Eugene Brusov所提到的,您现在可以将LiveData与数据绑定一起使用。这就是我现在正在做的,用更少的样板文件就容易多了。看见https://developer.android.com/topic/libraries/data-binding/architecture.
这是一种已知的不相容性。不能同时扩展BaseObservable
和AndroidViewModel
,因此不能使用@Bindable
进行双向数据绑定
这将在arch components 1.0 final(数据绑定端)之后修复。
*编辑:您可以创建自己的ObserviewModel:https://gist.github.com/JoseAlcerreca/4b66f9953d50b483d80e6b9ad7172685
我有一个结构数组 我希望合并并按升序排序数组。然而,当我执行合并时,没有任何变化。这是我用来创建struct数组的代码,以及MergeSort的函数调用。最大用户数是我从二叉树中转换节点数得到的整数,它应该是数组的最大数量。 任何提示或提示都将不胜感激! 编辑:当我尝试编写一些printf语句时,我注意到这些值是负数。但是存储在结构中的值是正数。这个错误的原因是什么?
我正在使用Kotlin,kapt和Android架构组件。当我构建项目时,一切似乎都很好,但在试图在设备/模拟器上运行应用程序后,Gradle的:Assemble任务抛出以下错误: 警告:警告:注释处理器“Android.arch.persistence.room.RoomProcessor”支持的源版本“release_7”小于-source“1.8” 更新 模块构建。在此处分级 项目生成。gr
我知道如何使用ViewModel,Repository和Room将数据从数据库传输到屏幕。但是如何使用POST方法实现登录活动。我需要从ViewModel或AuthorizationRepository创建LiveData isAuthorated吗?有人能展示在android架构组件中使用命令方法的示例吗?
本文向大家介绍集合框架底层数据结构总结一下?相关面试题,主要包含被问及集合框架底层数据结构总结一下?时的应答技巧和注意事项,需要的朋友参考一下 Collection 1. List Arraylist: Object数组 Vector: Object数组 LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环) 2. Set HashSet(无序,唯一): 基于 Ha
书籍: 数据结构与算法javascript描述 数组比较简单,这里只是简单介绍: 1.使用数组 1.1 创建数组 //第一种形式 var numbers = new Array(3); //第二种形式 var numbers = [7,4,1776]; 大多数JavaScript 专家推荐使用[]操作符,和使用Array 的构造函数相比,这种方式被认为效率更高(new创建的对象,会一直存在于内存
它幕后做的相当于: