фиксация нажатия кнопки вызывает потерю состояния? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть почти «одно приложение активности», я пытаюсь заменить основной фрагмент на -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;
                }
            });

Как вы думаете, действительно ли это приводит к потере состояния?если так, как я могу избежать этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...