findFragmentById для кнопки «Назад» становится пустым, так как размер становится нулевым - PullRequest
0 голосов
/ 30 апреля 2019

Вот мой поток / структура:

  • Активность
  • Фрагмент
  • Тот же фрагмент внутри него.

Я переопределил removeCurrentFragment() метод, который возвращает функциональность, удаляя фрагмент по идентификатору, следующим образом -

 @Override
    public void removeCurrentFragment() {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.fragment);

        if (currentFrag != null)
            transaction.remove(currentFrag);

        transaction.commit();
    }

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

Если требуется более подробная информация, пожалуйста, не стесняйтесь спрашивать в комментариях.Я буду редактировать вопрос в соответствии с необходимыми подробностями.

Я думал, что это связано с удалением фрагмента, но я создал новый фрагмент с отдельным XML, но у меня все та же проблема.

У меня есть родительу фрагмента с нумерацией страниц (так как мне нужна горизонтальная прокрутка страницы) есть дочерний фрагмент, при нажатии на кнопку дочернего фрагмента новый фрагмент заменяется, поэтому при удалении X и Y дочернего фрагмента также нарушаются.

здесь скриншот до и после оси x и y дочернего фрагмента. До enter image description here После enter image description here

Кто-нибудь может подсказать, в чем может быть проблема?

1 Ответ

1 голос
/ 30 апреля 2019

Вы должны использовать тег для загрузки Fragment, а затем снова использовать этот же тег для его удаления.

Например, чтобы добавить Fragment:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
fragmentManager.popBackStack(tag, androidx.fragment.app.FragmentManager.POP_BACK_STACK_INCLUSIVE);
ft.setCustomAnimations(R.anim.enter, R.anim.exit);
ft.add(containerId, fragment, tag);
ft.addToBackStack(tag);
ft.commit();

Чтобы удалить его, снова используйте тот же тег:

if (fragmentManager.findFragmentByTag(currentTag) != null) {
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.remove(fragmentManager.findFragmentByTag(currentTag));
    ft.commit();
}
...