Нужен ли LiveData наблюдатель в Kotlin и SQLite? - PullRequest
0 голосов
/ 14 февраля 2020

Я наткнулся на такой код и у меня возник вопрос по этому поводу. В ViewModel переменная nights объявляется и форматируется следующим образом:

 private val nights = database.getAllNights()

val nightsString = Transformations.map(nights) { nights ->
    formatNights(nights, application.resources)
}

getAllNights () - это функция в Dao, которая выглядит так:

@Query("SELECT * FROM daily_sleep_quality_table ORDER BY nightId DESC")
fun getAllNights(): LiveData<List<SleepNight>>

getAllNights () не вызывается где-либо еще в коде, но что удивляет меня, наблюдатель LiveData больше нигде, несмотря на это отображаемый текст автоматически обновляется на экране каждый раз, когда я что-то добавляю в базу данных с помощью кнопки:

  android:text="@{sleepTrackerViewModel.nightsString}" />

Достаточно ли этого только в Kotlin и SQLite, чтобы возвращать живые данные в Dao, и вам это не нужно наблюдатель? И если вам это нужно, когда?

1 Ответ

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

Скорее всего, они используют Привязка данных , поэтому вы не можете видеть наблюдателя нигде.

В вашем файле макета должно быть что-то вроде этого:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
</layout>

А в вашем build.gradle что-то вроде этого:

android {
    ...
    dataBinding {
        enabled = true
    }
}
...