У меня есть почти «одно приложение активности», я пытаюсь заменить основной фрагмент на -for пример- фрагмент профиля на выбранном элементе навигации, как бы я ни боялся, что это приведет к исключению незаконного состояния в результате фиксации после onSaveInstanceState
, который называется другими словами Потеря состояния: https://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
Я использовал commitAllowingStateLoss
, чтобы избежать падения при сбое потери состояния, но его можно изменить.
navigationView
.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.main:
Fragment f = getSupportFragmentManager().findFragmentByTag("main");
if (f==null || !f.isVisible()) {
getSupportFragmentManager().beginTransaction().replace(R.id.containerLayout, new MainFragment(), "main").commitAllowingStateLoss();
}
break;
case R.id.myProfile:
Fragment f2 = getSupportFragmentManager().findFragmentByTag("myProfile");
if (f2==null || !f2.isVisible()) {
getSupportFragmentManager().beginTransaction().replace(R.id.containerLayout, new MyProfileFragment(), "myProfile").commitAllowingStateLoss();
}
break;
mDrawerLayout.closeDrawers();
return true;
}
});
Как вы думаете, действительно ли это приводит к потере состояния?если так, как я могу избежать этого?