首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的MediatorLiveData没有更新

我的MediatorLiveData没有更新
EN

Stack Overflow用户
提问于 2020-05-25 18:09:25
回答 1查看 1K关注 0票数 0

我不知道为什么我的mediatorLiveData不更新?我还在我的活动文件中设置了观察者。我想做的是

单击将向mediatorLivedata

  • another按钮添加源数据的
  1. 按钮,该按钮将不断更改livedata,以便我的中介livedata应该更新( changeLiveData1是此处的按钮)

我是按顺序做的,似乎不起作用。此外,我在构造调用期间初始化了我的第一点。同样的问题..。MainActivity.kt

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

    lateinit var viewModel: MainViewModel

    override
    fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

        viewModel.mediatorLiveData.observe(this, Observer {

            text_view_content.text = it
        })

        livedata1.setOnClickListener {

            viewModel.changeLiveData1()
        }

        livedata2.setOnClickListener {
            viewModel.changeLiveData2()
        }

        add_source.setOnClickListener {
            viewModel.addSourceLivedata1()
        }
    }
}

MainViewModel.kt类MainViewModel : ViewModel() {

代码语言:javascript
复制
val mediatorLiveData: MediatorLiveData<String>
    get() = MediatorLiveData()


val _livedata1: MutableLiveData<String>
    get() = MutableLiveData<String>()


var change = 0
fun changeLiveData1() {
    change++
    _livedata1.value = "chnaged lived data...$change"
}

fun changeLiveData2() {

}


fun addSourceLivedata1() {

    var count = 0
    mediatorLiveData.addSource(_livedata1) {
        count++
        Log.d("MainView", "$count is ")
        if (count > 5) {
            mediatorLiveData.value = "changed from adding source... $count"
        } else {
            mediatorLiveData.value = "count is less than 5"
            Log.d("MainView", "count is $count")
        }
    }

}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 18:16:15

每次访问变量时都要创建一个新实例。

代码语言:javascript
复制
val mediatorLiveData: MediatorLiveData<String>
    get() = MediatorLiveData()

val _livedata1: MutableLiveData<String>
    get() = MutableLiveData<String>()

把它改成

代码语言:javascript
复制
val mediatorLiveData: MediatorLiveData<String> = MediatorLiveData()

val _livedata1: MutableLiveData<String> = MutableLiveData<String>()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62008205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档