Как сохранить данные в Fragment для переиспользования

«Как сохранить данные в Fragment для переиспользования» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используйте setRetainInstance(true) в onCreate(), но это работает только для конфигурационных изменений (например, поворот экрана). Для более сложных сценариев лучше сохранять данные в ViewModel, которая переживает изменения конфигурации:

class MyFragment : Fragment() {
    private lateinit var viewModel: MyViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    }
}

Для сохранения состояния между уничтожением и воссозданием фрагмента используйте onSaveInstanceState():

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("KEY", importantData)
}

И восстанавливайте в onViewCreated() или onCreate().