首页 > 解决方案 > 当大小变为零时,后退按钮上的 findFragmentById 变为空白

问题描述

这是我的流程/结构:

我已经覆盖removeCurrentFragment()了通过 ID 删除 Fragment 来返回功能的方法,如下所示 -

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

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

        transaction.commit();
    }

似乎,当发生这种情况时,由于两个片段的 ID 相同,它会创建空白视图。

如果需要更多详细信息,请随时在评论中提问。我将根据所需的详细信息编辑问题。

我认为这与删除片段有关,但是我用单独的 XML 制作了新片段,但我仍然遇到同样的问题。

我有带有分页的父片段(因为我需要水平页面滚动),其中有子片段,当单击子片段按钮时,新片段被替换,因此当它被删除时,子片段的 X 和 Y 也会受到干扰。

这是子片段的x和y轴的前后截图。 之前 之后在此处输入图像描述 在此处输入图像描述

任何人都可以建议可能是什么问题?

标签: androidandroid-fragmentsandroid-viewpagerandroid-fragmentactivitylinearlayoutmanager

解决方案


您必须使用标签来加载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();
}

推荐阅读