Мои данные MediatorLiveData не обновляются - PullRequest
0 голосов
/ 25 мая 2020

Я понятия не имею, почему мой mediatorLiveData не обновляется? Я также установил наблюдателя в моем файле активности. Я пытаюсь сделать это

  1. нажмите кнопку, которая добавит источник живых данных в мои mediatorLivedata
  2. другую кнопку, которая будет продолжать изменять liveata, чтобы мои живые данные посредника должны обновляться ( Здесь кнопка changeLiveData1)

Я делаю это в том порядке, в котором это не работает. Также я инициализировал во время вызова конструкции мою 1-ю точку. По-прежнему та же проблема .. 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")
        }
    }

}
}

1 Ответ

1 голос
/ 25 мая 2020

Вы создаете новый экземпляр каждый раз при доступе к переменной

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

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

Измените его на

val mediatorLiveData: MediatorLiveData<String> = MediatorLiveData()

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