Сохранить состояние фрагмента при переключении вкладок - PullRequest
0 голосов
/ 06 июня 2018

У меня есть 4 вкладки A, B, C и D. Я хочу сохранить предыдущий вид вкладок.Пример: вкладка A (по умолчанию) -> B -> A. Возвращаясь к вкладке A, я хочу, чтобы представления вкладки A были такими же, как и раньше

Graph: Fragment A (or B or C or D) on top of 4 tabs (A, B, C, D)

Вот мой код:

private void replaceFragment(Constants.BottomTab bottomTab) {
    Fragment fragment = getSupportFragmentManager().findFragmentByTag(bottomTab.getValue());
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    if (fragment == null) {
        switch (bottomTab) {
            case A:
                fragment = new A();
                break;
            case B:
                fragment = new B();
                break;
            case C:
                fragment = new C();
                break;
            case D:
                fragment = new D();
                break;
        }
        transaction.replace(R.id.main_container, fragment,bottomTab.getValue() );
        transaction.addToBackStack(bottomTab.getValue()); // Tag
        transaction.commit();
        Log.v(">>>", "Create fragment: " + fragment.getTag());
    } else { // pop from stack
        transaction.replace(R.id.main_container, fragment, bottomTab.getValue());
        transaction.commit();
        Log.v(">>>", "Found fragment: " + fragment.getTag());
    }
}

Вкладка A продолжает обновляться, когда я переключаюсь на нее со вкладки B

Я знаю, что другой подход использует ViewPager и ViewPager.setOffscreenPageLimit(4), ноКаково решение моего кода выше?

Кто-нибудь может помочь?Заранее спасибо!

1 Ответ

0 голосов
/ 06 июня 2018

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

private Fragment aFrag;
private Fragment bFrag;
private Fragment cFrag;
private Fragment dFrag;

private void replaceFragment(Constants.BottomTab bottomTab) {
    Fragment fragment = getSupportFragmentManager().findFragmentByTag(bottomTab.getValue());
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    if (fragment == null) {
        switch (bottomTab) {
            case A:
                if (aFrag == null) aFrag = new A();
                fragment = aFrag;
                break;
            case B:
                if (bFrag == null) bFrag = new B();
                fragment = bFrag;
                break;
            case C:
                if (cFrag == null) cFrag = new C();
                fragment = cFrag;
                break;
            case D:
                if (dFrag == null) dFrag = new D();
                fragment = dFrag;
                break;
        }
        transaction.replace(R.id.main_container, fragment,bottomTab.getValue() );
        transaction.addToBackStack(bottomTab.getValue()); // Tag
        transaction.commit();
        Log.v(">>>", "Create fragment: " + fragment.getTag());
    } else { // pop from stack
        transaction.replace(R.id.main_container, fragment, bottomTab.getValue());
        transaction.commit();
        Log.v(">>>", "Found fragment: " + fragment.getTag());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...