androidx ViewModel MutableLiveData LiveData - PullRequest
       6

androidx ViewModel MutableLiveData LiveData

0 голосов
/ 19 февраля 2020

Я новичок в Kotlin и Android программировании. Я не могу понять, почему onChanged не появился в первых двух примерах, но последний пример в порядке. Любые предложения будут более ценными.

var liveDataTest:MutableLiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
 //Cannot find "override fun onChanged"
})
var liveDataTest:LiveData<String> = MutableLiveData("ABC")
liveDataTest.observe(this, androidx.lifecycle.Observer() {
 //Cannot find "override fun onChanged"
})
class test:androidx.lifecycle.Observer<String>{
    override fun onChanged(t: String?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
}

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

В kotlin пользователь может напрямую наблюдать без использования методов переопределения:

val liveDataTest: MutableLiveData<String> = MutableLiveData("ABC")
        liveDataTest.observe(this, androidx.lifecycle.Observer { it ->
            Toast.makeText(context,it,Toast.LENGTH_SHORT).show()
        })
0 голосов
/ 19 февраля 2020

Ваш синтаксис неверен в первых двух. Если вы хотите передать анонимный класс таким образом, синтаксис должен использовать ключевое слово object, и поскольку Observer является интерфейсом, а не классом, вам не нужно вызывать его конструктор с (). * 1003. *

liveDataTest.observe(this, object: androidx.lifecycle.Observer {
    override fun onChanged(t: String?) {
        TODO("not implemented")
    }
})

Но так как это интерфейс с одной функцией Java, вы можете упростить синтаксис с помощью лямбды:

liveDataTest.observe(this) {
    TODO("not implemented")
}
...