Урок 2. LiveData

Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 2. LiveData

Сообщение damager82 » 28 дек 2017, 20:22

В этом уроке рассмотрим основные возможности LiveData. Как подписаться на его данные. Как помещать в него данные. Как он взаимодействует со своими подписчиками.


Click here to read this article!
Последний раз редактировалось damager82 25 июн 2018, 12:49, всего редактировалось 10 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

dmitres
Сообщения: 5
Зарегистрирован: 04 фев 2016, 15:52

Re: Урок 2. LiveData

Сообщение dmitres » 23 мар 2018, 01:22

При использовании такого подхода, данные в UI элементы попадают после их (элементов) отображения на форме.
Что приводит к мерцанию при первом открытии формы, в моем случае это fragment. Чем больше LiveData используется и больше виджетов на форме тем сильнее заметны мерцания.

genbachae
Сообщения: 9
Зарегистрирован: 20 авг 2019, 08:06

Re: Урок 2. LiveData

Сообщение genbachae » 07 дек 2019, 07:03

Уважаемые форумчане подскажите пожалуйста, почему не происходит вызова функции "onChanged"?

Код: Выделить всё

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val liveData = DataController.getData()

    liveData?.observe(this, Observer<String>() {
        @Override
        fun onChanged(@Nullable value:String) {
            textView.text = value
        }
    });
}

fun refresh(view: View) {
    DataController.refresh()
}

object DataController {                                 //  это синглтон!
private val liveData = MutableLiveData<String>()

fun getData(): LiveData<String>? {
    return liveData
}

fun getCurrentDateTime(): Date {
    return Calendar.getInstance().time
}

fun refresh(){
    val date = getCurrentDateTime()
    val dateInString = date.toString()
    liveData.value = dateInString
}
Саму подписку вроде верно сделал, данные обновляю путём вызова: DataController.refresh()

Исходный код лежит здесь: https://github.com/genbachae/T_LiveData

или здесь: https://drive.google.com/open?id=1wKZx_ ... _oJ9_WyU8W

Ответить