Лучший способ использовать фрагменты

Есть много ответов на эти вопросы, но технически мой вопрос отличается, я прочитал некоторую документацию и согласился, что мы не должны использовать несколько фрагментов только в одном действии, мы должны использовать несколько действий с несколькими фрагментами в зависимости от требований проекта или спецификации пользовательского интерфейса. , поэтому архитектура моего приложения: 1. BaseActivity и все действия распространяются на этот 2. BaseFragment и все фрагменты распространяются на этот мой код:

в BaseActivity я сделал следующие функции

public void replaceFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(containerViewId, fragment, fragmentTag);
    if(addToBackStack)
        fragmentTransaction.addToBackStack(fragmentTag);
    if(fragmentTag.matches("") && addToBackStack)
        fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

Чтобы добавить фрагмент в Framelayout

public void addFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack, boolean isPending) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(containerViewId, fragment, fragmentTag);
    if(addToBackStack)
        fragmentTransaction.addToBackStack(fragmentTag);
    if(fragmentTag.matches("") && addToBackStack)
        fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    if(isPending)
        fragmentManager.executePendingTransactions();
}

Назад Нажмите Функциональность

public void popBackStackImmediate() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.popBackStackImmediate();
}

Получить общее количество фрагментов

public List<Fragment> fragmentList(){
    return getSupportFragmentManager().getFragments();
}

и поток FragmentA (добавить) -> FragmentB (заменить) ->

ВОПРОС 1: почему totalFragments показывает 2? пока я заменил FragmentB на A

ВОПРОС 2: когда я нажимаю кнопку «Назад», все еще отображаются 2 фрагмента и как я могу удалить их из стека?

Вопрос 3: FragmentB виден, но жизненный цикл фрагмента FragmentA тоже работает.. означает, что функции onResume и onCreate вызывают слишком странно, но верно, не знаю, почему


person Abdul Rahman    schedule 26.04.2017    source источник


Ответы (1)


Вопрос 1: Вы не удалили ни одного фрагмента, поэтому количество фрагментов равно 2. Когда вы заменяете фрагмент, вы заменяете его в контейнере фрагментов, а не в его экземпляре.

Вопрос 2: Как только вы добавите фрагмент в стопку, это означает, что вы вернетесь к нему, как только нажмете кнопку «Назад». Тем не менее, количество фрагментов вашего диспетчера фрагментов по-прежнему будет равно 2, поскольку ни один фрагмент не был удален. Если вы хотите удалить его, следующий код сделает свое дело:

getSupportFragmentManager().beginTransaction().remove(yourFragment).commit();

Вопрос 3: После того, как вы замените фрагмент A фрагментом B, фрагмент A все еще будет активен и будет вызывать его onPause, onDestroy и onDestroyView, если вы вернете его обратно в контейнер, он начнет свой жизненный цикл с onCreateView, это означает, что запуск onResume является нормальным , однако onCreate нет.

person Ricardo    schedule 26.04.2017