Заменить фрагмент другим фрагментом внутри ViewPager

Я использую ViewPager вместе с FragmentPagerAdapter для размещения трех разных фрагментов

[Fragment1][Fragment2][Fragment3]

Я пытаюсь добиться того, чтобы успешно заменить Fragment1 на совершенно новый фрагмент, Fragment4, если конкретная задача выполнена успешно.

Когда я использую ..

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment1_layout_id, fragment4);
transaction.commit();

.. фрагмент красиво заменен, и Fragment4 показан вместо Fragment1. Хотя, как только я проведу пальцем до фрагмента 3, а затем снова до фрагмента 4, фрагмент 1 вернется.

Опять же, если я использую ..

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment1);
transaction.commit();

..Fragment1 удаляется, и когда я возвращаюсь, Fragment4 там. Таким образом, проблема с этим решением состоит в том, что я не смог найти способ немедленно показать Fragment4, поскольку Fragment1 удален, даже если я попытался:

transaction.add(fragment4);
transaction.show(fragment4);

А вот как выглядит моя реализация FragmentPagerAdapter на данный момент,без управления транзакциями:

public static class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return VIEW_COUNT;
    }

    @Override
    public Fragment getItem(int position) {

        Fragment fragment = null;

        switch (position) {
        case 0:
            fragment = Fragment1.newInstance(context_);
            break;

        case 1:
            fragment = Fragment2.newInstance(context_);
            break;

        case 2:
            fragment = Fragment3.newInstance(context_);
            break;

        default:
            break;
        }

        return fragment;
    }
}

Редактировать.

Похоже, мне не совсем понятен мой вопрос. Я решил удалить все спагетти, которые мне удалось создать ранее, и попытался заявить, что я их оставил (см. Текст, выделенный жирным шрифтом выше).

В любом случае, вот что я пытался сделать внутри getItem ():

@Override
public Fragment getItem(int position) {

    Fragment fragment = null;

    switch (position) {
    case 0:

        if (!app.isUserLoggedIn) {
            if (loginFragment_ == null) {
                loginFragment_ = LoginFragment.newInstance(context_);
                transaction_ = fragmentManager_.beginTransaction();

                if (logoutFragment_ != null) {
                    transaction_.remove(logoutFragment_);
                    logoutFragment_ = null;
                }

                transaction_.add(loginFragment_, "login");
                transaction_.commit();
            }

            if (fragmentManager_.findFragmentByTag("login") == null)
                fragment = LoginFragment.newInstance(context_);
            else
                fragment = fragmentManager_.findFragmentByTag("login");

        } else {
            if (logoutFragment_ == null) {                      
                logoutFragment_ = LogoutFragment.newInstance(context_);
                transaction_ = fragmentManager_.beginTransaction();

                if (loginFragment_ != null) {
                    transaction_.remove(loginFragment_);
                    loginFragment_ = null;
                }

                transaction_.add(logoutFragment_, "logout");
                transaction_.commit();
            }

            if (fragmentManager_.findFragmentByTag("logout") == null)
                fragment = LogoutFragment.newInstance(context_);
            else
                fragment = fragmentManager_.findFragmentByTag("logout");
        }
        break;

    case 1:
        fragment = HomeFragment.newInstance(context_);
        break;

    case 2:
        fragment = RegisterFragment.newInstance(context_);
        break;

    default:
        break;
    }

    return fragment;
}

С этим кодом я ничего не делаю, но если кто-то увидит, что я делаю неправильно, и хотел бы указать мне правильное направление, я был бы очень признателен!

Ответы на вопрос(6)

Ваш ответ на вопрос