android - 在没有生命周期所有者的情况下使用 LiveData

标签 android kotlin android-architecture-components android-livedata

如果在没有生命周期所有者的情况下使用 LiveData 是个坏主意,我找不到任何信息。如果是,还有什么替代方案?

举个简单的例子

class Item() {
    private lateinit var property: MutableLiveData<Boolean>

    init {
        property.value = false
    }

    fun getProperty(): LiveData<Boolean> = property

    fun toggleProperty() {
        property.value = when (property.value) {
            false -> true
            else -> false
        }
    }
}

class ItemHolder {

    private val item = Item()

    private lateinit var observer: Observer<Boolean>

    fun init() {
        observer = Observer<Boolean> { item ->
            updateView(item)
        }
        item.getProperty().observeForever(observer)
    }

    fun destroy() {
        item.getProperty().removeObserver(observer)
    }

    fun clickOnButton() {
        item.toggleProperty();
    }

    private fun updateView(item: Boolean?) {
        // do something
    }
}

最佳答案

您可以使用

在没有关联 LifecycleOwner 对象的情况下注册观察者
observeForever(Observer) method

像那样:

 orderRepo.getServices().observeForever(new Observer<List<Order>>() {
            @Override
            public void onChanged(List<Order> orders) {
               //
            }
        });

关于android - 在没有生命周期所有者的情况下使用 LiveData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103416/

相关文章:

android - 如何获得具有有效 Surface 的 SurfaceHolder(EGL.eglCreateWindowSurface 需要)?

android - Caldroid、ActionBarSherlock 和 Maven

android - 在android中访问.sqlite数据库(> 1Mb大小)

Kotlin native - 执行可执行文件

android - 带有多个非强制性过滤器的房间 DAO

android - 语音识别在几秒钟后停止收听

Kotlin:遍历集合中的每一对(或通常固定大小的子集)

android - 如果方法使用不重叠,2 个 Activity 是否应该有单独的 ViewModel?

android - 无法从 XML 访问 NavHostFragment

Android Livedata Observer 协程 Kotlin