Во фрагментах Android мы можем получить исходные данные в onCreateView()
из savedInstanceState
или getArguments()
.Я часто проверяю их обоих на null
и затем назначаю переменные.Например, в Kotlin:
val bundle = savedInstanceState ?: arguments
bundle?.let {
startDate = Date(it.getLong(ARG_START_DATE, 0))
endDate = Date(it.getLong(ARG_END_DATE, startDate.time))
}
Итак, сначала я проверяю, получит ли оттуда savedInstanceState != null
и, если да, то данные.Если он будет нулевым, я проверю getArguments() != null
и, если это так, получит данные оттуда.В противном случае переменные будут нулевыми, 0 или ложными.
Когда мы оставляем фрагмент и вызываем onSaveInstanceState()
, мы можем записать данные в пакет и позже можем прочитать их в onCreateView()
.Но мы также можем записать данные в getArguments()
и прочитать их из любого места фрагмента.Почему мы должны использовать savedInstanceState
, поскольку мы можем написать getArguments()
?