Заменить фрагмент после падения ориентации - PullRequest
0 голосов
/ 16 октября 2018

Когда пользователь меняет ориентацию экрана и выполняет «goToDetails», FragmentManager выдает

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

Код класса:

@ActivityScope
class NavigatorImpl @Inject constructor(): ActivityLifecycleTask(), Navigator {

private lateinit var fragmentManager: FragmentManager

@IdRes
private var fragmentContainerRes: Int = 0

override fun onCreate(activity: BaseActivity) {
    fragmentManager = activity.supportFragmentManager
    fragmentContainerRes = activity.fragmentContainerRes()
}

override fun init(fragment: BaseFragment) {
    goToFragment(fragment, TAG_INIT_FRAGMENT)
}

override fun goToDetails(id: Long) {
    goToFragment(DetailsFragment.create(id))
}

private fun goToFragment(fragment: Fragment, tag: String? = null) {
    Log.d(javaClass.simpleName, "goToFragment")
    fragmentManager.beginTransaction()
            .add(fragmentContainerRes, fragment, tag)
            .addToBackStack(null)
            .commit()
}

companion object {
    private const val TAG_INIT_FRAGMENT = "TAG_INIT_FRAGMENT"
}
}

commitAllowingInstanceStateLoss() не работает.onCreate(activity) выполняется в обратном вызове Activity onCreate.Затем, пока savedInstanceState == null, init() из NavigatorImpl выполняется.

1 Ответ

0 голосов
/ 16 октября 2018

Когда вы поворачиваете экран, ваша активность onCreate будет выполняться, но savedInstanceState не будет null.Если вы не проверите, является ли он пустым или нет, вы все равно попытаетесь совершить новую транзакцию, чтобы инициировать свою активность.Поэтому вы должны проверить, если savedInstanceState == null, прежде чем инициировать ваши фрагменты.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
        // commit your fragment transaction.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...