в следствии.

разница между этими двумя методами класса LiveData? Официальный документ и учебник довольно расплывчаты по этому вопросу. вкарта() метод первый параметр называетсяисточник но вswitchMap () это называетсяспусковой крючок, Что за этим стоит?

Ответы на вопрос(1)

Решение Вопроса

Transformations.map ()

Применяет функцию к значению, хранящемуся в объекте LiveData, и распространяет результат в нисходящем направлении.

Transformations.switchMap ()

Подобно карте, применяет функцию к значению, хранящемуся в объекте LiveData, и разворачивает и отправляет результат в нисходящем направлении.Функция, переданная в switchMap (), должна возвращать объект LiveData.

Другими словами, я могу быть не на 100% прав, но если вы знакомы с RxJava;Transformations#map отчасти похож наObservable#map & Transformations#switchMap похоже наObservable#flatMap.

Давайте рассмотрим пример, есть LiveData, который испускает строку, и мы хотим отображать эту строку заглавными буквами.

Один подход будет следующим: в деятельности или фрагменте

Transformations.map(stringsLiveData, String::toUpperCase)
    .observe(this, textView::setText);

функция переданаmap возвращает только строку, но этоTransformation#map который в конечном итоге возвращаетLiveData.

Второй подход; в деятельности или фрагменте

Transformations.switchMap(stringsLiveData, this::getUpperCaseStringLiveData)
            .observe(this, textView::setText);

private LiveData<String> getUpperCaseStringLiveData(String str) {
    MutableLiveData<String> liveData = new MutableLiveData<>();
    liveData.setValue(str.toUpperCase());
    return liveData;
}

Если ты видишьTransformations#switchMap фактически переключилLiveData, Итак, еще раз согласно документацииФункция, переданная в switchMap (), должна возвращать объект LiveData.

Итак, в случаеmap этоисточник LiveData вы трансформируете и в случаеswitchMap прошлоLiveData будет действовать какспусковой крючок на котором он переключится на другойLiveData после распаковки и отправки результата вниз по течению.

 Igor Bubelov07 дек. 2017 г., 14:02
Это объясняет названия. Таким образом, они оба должны запускаться каждый раз, когда изменяется базовая LiveData, и «переключение» означает, что LiveData будет переключаться на другой объект LiveData. Спасибо!

Ваш ответ на вопрос