Android. Программирование для профессионалов. 4-е издание


crimeRecyclerView.adapter = adapter



Download 21,53 Mb.
Pdf ko'rish
bet189/485
Sana13.07.2022
Hajmi21,53 Mb.
#787165
1   ...   185   186   187   188   189   190   191   192   ...   485
Bog'liq
Android Programmirovanie dlya professionalov 4-e izdanie 2020 Fillips Styuart Marsikano Gardner

crimeRecyclerView.adapter = adapter
return view
}
override fun onViewCreated(view: View,
savedInstanceState: Bundle?) {
super.onViewCreated(view,
savedInstanceState)
crimeListViewModel.crimeListLiveData.ob
serve(
viewLifecycleOwner,
Observer { crimes ->
crimes?.let {
Log.i(TAG, "Got crimes
${crimes.size}")
updateUI(crimes)
}
})
}
...
}


Функция
LiveData.observe(LifecycleOwner,Observer)
используется для регистрации наблюдателя за экземпляром
LiveData
и связи наблюдения с жизненным циклом другого
компонента.
Второй параметр функции 
observe(...)
— это реализация
Observer
. Этот объект отвечает за реакцию на новые данные
из 
LiveData
. В этом случае блок кода наблюдателя
выполняется всякий раз, когда обновляется список в 
LiveData
.
Наблюдатель получает список преступлений из 
LiveData
и
печатает сообщение журнала, если свойство не равно нулю.
Если вы не снимали наблюдателя с прослушивания
изменений в 
LiveData
, реализация наблюдателя может
попытаться обновить элемент вашего фрагмента, когда
представление находится в нерабочем состоянии (например,
когда элемент уничтожается). И если вы пытаетесь обновить
недопустимый элемент, ваше приложение может сломаться.
Здесь на сцену выходит параметр 
LifecycleOwner
из
LiveData.observe(...)
. Время жизни наблюдателя длится
столько же, сколько и у компонента, представленного
LifecycleOwner
. В примере выше наблюдатель связан с
фрагментом.
Пока владелец жизненного цикла, которому вы передаете
наблюдателя, находится в допустимом состоянии жизненного
цикла, объект 
LiveData
уведомляет наблюдателя о получении
новых данных. Объект 
LiveData
автоматически снимает
наблюдателя, когда соответствующий жизненный цикл
становится недоступен. Поскольку 
LiveData
реагирует на
изменения в жизненном цикле, он относится к категории lifecycle-
aware component. Вы узнаете больше о таких компонентах в
главе 25.


Владелец жизненного цикла — это компонент, который
реализует интерфейс 
LifecycleOwner
и содержит объект
жизненного цикла. Жизненный цикл — это объект, который
отслеживает текущее состояние Android на протяжении
жизненного цикла (напомним, что activity, фрагменты,
элементы и даже само приложение имеют свой собственный
жизненный цикл). Состояния жизненного цикла, такие как
создание и возобновление, перечислены в 
Lifecycle.State
.
Вы можете запросить состояние жизненного цикла, используя
функцию 
Lifecycle.getCurrentState()
, или подписаться
на уведомления об изменениях состояния.
Fragment
в AndroidX является владельцем жизненного
цикла 
непосредственно 
— 
Fragment
реализует
LifecycleOwner
и имеет объект 
Lifecycle
, представляющий
состояние жизненного цикла экземпляра фрагмента.
Жизненный цикл вида фрагмента является собственностью
и отслеживается отдельно во 
FragmentViewLifecycleOwner
.
Каждый 
Fragment
имеет 
экземпляр 
Frag 
ment- 
ViewLifecycleOwner
, который отслеживает жизненный цикл
этого фрагмента.
В приведенном выше коде мы определим области
наблюдения, чтобы отслеживать представления жизненного
цикла 
фрагмента, 
а 
не 
сам 
фрагмент, 
передав
viewLifecycleOwner
функции 
observe(...)
. Жизненный
цикл представления фрагмента, хотя и отделен от жизненного
цикла самого экземпляра фрагмента, отражает жизненный
цикл фрагмента. Можно изменить поведение по умолчанию,
удержав фрагмент (что мы не будем делать в CriminalIntent). Вы
узнаете больше о жизненном цикле представления и
удержании фрагментов в главе 25.
Fragment.onViewCreated(...)
вызывается 
после
возврата 
Fragment.onCreate 
View(...)
, давая понять, что


иерархия представления фрагмента находится на месте. Мы
наблюдали за 
LiveData 
от 
onViewCreated(...)
, чтобы
убедиться, что виджет готов к отображению данных о
преступлении. Именно поэтому вы передаете функции
observe()
объект 
viewLifecycleOwner
, а не сам фрагмент.
Нам нужно получать список преступлений только в том случае,
если представление в должном состоянии, и тогда вы не будете
получать уведомления, когда виджет не находится на экране.
Когда список преступлений готов, наблюдатель выводит
сообщение и посылает список в 
updateUI()
для подготовки
адаптера.
Теперь запустите CriminalIntent. Ошибок больше быть не
должно. Вместо этого вы должны увидеть преступления из
файла базы данных, загруженного в ваш эмулятор (рис. 11.8).
В следующей главе мы подключим список преступлений к
экрану и заполним этот экран подробными данными.



Download 21,53 Mb.

Do'stlaringiz bilan baham:
1   ...   185   186   187   188   189   190   191   192   ...   485




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish