0

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

  1. 单击一个按钮,将实时数据源添加到我的 mediatorLivedata
  2. 另一个将不断更改实时数据的按钮,以便我的中介实时数据应该更新(changeLiveData1 是此处的按钮)

我按照它似乎不起作用的顺序执行此操作。我也在构造调用期间初始化了我的第一点。还是同样的问题.. MainActivity.kt

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() {

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")
        }
    }

}
}
4

1 回答 1

1

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

val mediatorLiveData: MediatorLiveData<String>
    get() = MediatorLiveData()

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

将其更改为

val mediatorLiveData: MediatorLiveData<String> = MediatorLiveData()

val _livedata1: MutableLiveData<String> = MutableLiveData<String>()
于 2020-05-25T18:16:15.103 回答