Вернуться на неверную вкладку внутри tablayout с фрагментами - PullRequest
0 голосов
/ 25 апреля 2018

Вот поток моего приложения.

enter image description here

Шаг для исправления ошибки.

  • Откройте приложение, первый экран будет Фрагмент A1
  • Перейти к фрагменту A2 из A1
  • Нажмите на вкладку B, которая является фрагментом B1
  • Перейти к фрагменту B2 из B1
  • Нажмите на вкладку A (на экране отображается A2)
  • * Нажмите на НАЗАД , экран не меняется. Если я нажму на вкладку B, я смогу увидеть экран обратно к B1.

Любой способ исправить, если я нажму НАЗАД на А2, я могу вернуться к А1.

Кстати, я проверяю getBackStackEntryCount() на А2 и В2. Я вижу, что последний backStackEntryCount равен 2.

Ниже мой код

От А1 до А2 или от В1 до В2

ChildVC childFrag = new ChildVC();
getFragmentManager().beginTransaction().add(R.id.frameChildFragment, childFrag)
    .addToBackStack(null)
    .commit(); 

1 Ответ

0 голосов
/ 25 апреля 2018
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
Fragment currentFragment;

для толкания фрагмента:

public void pushFragment(Fragment fragment, boolean addToBackStack, boolean shouldAnimate, Bundle bundle) {

        currentFragment = fragment;

        if (bundle != null) {
            fragment.setArguments(bundle);
        }
        fragmentTransaction = fragmentManager.beginTransaction();

        if (shouldAnimate) {
            fragmentTransaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right);
        } else {
            fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
        }
        if (addToBackStack) {
            fragmentTransaction.addToBackStack(fragment.getClass().getCanonicalName());
        }

        // Replace whatever is in the fragment_container dataView with this fragment,
        // and add the transaction to the back stack so the user can navigate back
        fragmentTransaction.replace(R.id.container, fragment, fragment.getClass().getCanonicalName());



        // Commit the transaction
        fragmentTransaction.commit();

    }

для поп-фрагмента:

public void popBackFragment() {

        try {
            int backStackCount = fragmentManager.getBackStackEntryCount();

            if (backStackCount > 1) {

                FragmentManager.BackStackEntry backStackEntry = fragmentManager.getBackStackEntryAt(backStackCount - 2);

                String className = backStackEntry.getName();

                Fragment fragment = fragmentManager.findFragmentByTag(className);

                currentFragment = fragment;

                fragmentManager.popBackStack();
            } else {

                  finish();

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...