android переход отстающего фрагмента - PullRequest
0 голосов
/ 19 апреля 2020

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

private void openFragment(int index)
{
    if(index == activeFragment)
    {
        return;
    }

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    //Set animations
    if(activeFragment < index)
    {
        ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
    } else {
        ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
    }

    //Hide old Fragment
    if (Fragments.get(activeFragment).isAdded())
    {
        ft.hide(Fragments.get(activeFragment));
        Fragments.get(activeFragment).getView().setTranslationZ(0);
    }

    //Add/Show new Fragment
    if (Fragments.get(index).isAdded()) 
    { // if the fragment is already in container
        ft.show(Fragments.get(index));
        Fragments.get(index).getView().setTranslationZ(1f);
    } else { // fragment needs to be added to frame container
        ft.add(R.id.fragment_container, Fragments.get(index), Integer.toString(index));
    }

    // Commit changes
    ft.commit();
}

Проблема заключается в том, что анимация заикается, даже если я заменяю фрагмент только одним RecyclerView и 10 элементами в нем. Загрузка также занимает много времени, если я запускаю фрагмент в первый раз, даже если я создаю фрагмент в методе OnCreate (поэтому это занимает так много времени, потому что он добавляет фрагмент в контейнер фрагментов? полсекунды для контейнера только с RecyclerView). Однако, если я не установлю какой-либо переход, фрагменты появятся сразу с небольшой задержкой (возможно, 30 мс, даже не стоит упоминать). Почему основной поток настолько перегружен анимацией, что ему не нужно создавать какой-либо вид, просто исчезая один фрагмент и добавляя другой.

Как я могу обрабатывать фрагменты, чтобы я мог переходить между ними плавно, сохраняя задержку как можно ниже? Я использую BottomNavigationView для навигации по фрагментам, поэтому он должен открываться немедленно, поэтому я сохраняю фрагменты.

...