Igo*_*dro 22 android kotlin android-databinding android-mvvm android-architecture-components
随着Android体系结构组件的稳定,我开始将所有基本ViewModel
的更新到新的实现ViewModel
.根据我的理解,LiveData
建议使用它来保存Model
类,因为它更好地处理生命周期.
我喜欢使用Data Binding
它,因为它使代码在Java/Kotlin方面更清晰,并且不需要"观察"值更改来更新UI.但是,Data Binding
如果Model
(或ViewModel)扩展BaseObservable
,LiveData
则仅使用监视数据的布局会发生变化.我理解的主要目标之一LiveData
是以编程方式观察和更新UI,但对于简单的更新,Data Binding
非常有用.
这个问题已经报道过(GitHub和Stack Overflow),并且首先说版本1.0会有它,现在据说这个功能正在开发中.
为了同时使用LiveData
和Data Binding
,我创建了一个非常简单的类实现,它扩展了BaseObservable
:
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.databinding.BaseObservable
class ObservableMutableLiveData<T>() : BaseObservable() {
private var data: MutableLiveData<T> = MutableLiveData()
constructor(data: T) : this() {
this.data.value = data
}
public fun set(value: T) {
if (value != data.value) {
data.value = value
notifyChange()
}
}
public fun get(): T? {
return data.value
}
public fun getObservable(): LiveData<T> {
return data
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我ObservableMutableLiveData
是一个副本,ObservableField
使用LiveData
存储模型,并用此实现,每一个模型更新后的布局更新.
问题是:
LiveData
?这个包装器是否"打破"了LiveData
诸如生命周期意识的功能?LiveData
是新的ObservableField
.它是否正确?Sir*_*lot 18
对于那些遇到这个问题寻找像我一样的例子的人来说,这里有一个:
在布局中.xml
放置LiveData
元素的类型:
<layout>
<data>
<variable
name="myString"
type="android.arch.lifecycle.MutableLiveData<String>"/>
</data>
...
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{myString}'
...
/>
...
</layout>
Run Code Online (Sandbox Code Playgroud)
在您的代码中设置它的值和生命周期所有者:
MutableLiveData<String> myString = new MutableLiveData<>();
...
binding.setLifecycleOwner(this);
binding.setMyString(myString);
Run Code Online (Sandbox Code Playgroud)
而已 :)
请注意,LiveData
元素的默认值是null
指定初始值以确保您立即获得所需效果或使用此值来强制执行可空性.
Igo*_*dro 12
Android Studio 3.1(目前在Canary 6中)将解决此问题,因为LiveData
可以用作observable field
:
数据绑定的更新:
您现在可以将LiveData对象用作数据绑定表达式中的可观察字段.ViewDataBinding类现在包含一个新的setLifecycle方法,您需要使用该方法来观察LiveData对象.
来源:Android Studio 3.1 Canary 6现已推出
归档时间: |
|
查看次数: |
12622 次 |
最近记录: |