Внутри моего Activity
я использую Fragment
с флагом retainInstance
, установленным в значение true, для хранения экземпляра моего класса уровня представления. Это работает довольно хорошо, чтобы пережить изменения вращения.
var retainedFragment = supportFragmentManager.findFragmentByTag(retainedTag)
if (retainedFragment == null) {
retainedFragment = BaseRetainedFragment<P>()
supportFragmentManager.beginTransaction()
.add(retainedFragment, retainedTag).commit()
presenter = getPresenter()
retainedFragment.setPresenter(presenter)
fragment = retainedFragment
} else {
presenter = (fragment as BaseRetainedFragment<P>).getPresenter()
}
* внутри Fragment
У меня есть lateinit
свойство presenter
Проблема в том, что когда дело доходит до убийства Activity
в фоновом режиме с помощью Android, потому что, как вы видите, я проверяю, есть ли на самом деле экземпляр моего Fragment
. После того, как процесс будет убит Android в фоновом режиме, когда приложение будет открыто, оно найдет Fragment
с этим тегом, но мое свойство не будет инициализировано (оно было очищено).
Мне удалось избавиться от аварии, сохранив мои Fragment
внутри savedInstanceState
внутри Activity
, но все равно я не получаю свой предыдущий экземпляр Presenter
. Я не могу позволить себе реализовать Parcelable
для моего Presenter
и сохранить его экземпляр внутри Fragment
.
Есть ли способ восстановить экземпляр моего класса из сохраненного фрагмента? Или даже объект с состоянием?
Примечание: я пытался сохранить только свое состояние как Parcelable
, но я получаю Type inference fail
все время, когда пытаюсь получить savedInstanceState.getParcelable(key)
.
PS Любое другое предложение удерживать состояние, когда activity
убивается в фоновом режиме, будет оценено