当我使用 fragmentTransaction.add 方法时片段重叠

Posted

技术标签:

【中文标题】当我使用 fragmentTransaction.add 方法时片段重叠【英文标题】:Fragments overlapping when I am using fragmentTransaction.add method 【发布时间】:2020-07-20 22:03:34 【问题描述】:

我遇到了一些奇怪的片段问题,我在这两个片段上显示谷歌地图,同时从Home Fragment 切换到Request cab 片段,在Request cab 片段中,片段重叠,我可以看到Home Fragment在背景中,它也可以点击我也可以移动Home Fragment 的地图。当我使用fragmentTransaction.add(R.id.frame, fragment, fragmenttag); 时会出现此问题 但如果我使用替换,那么它工作正常,但我想找回视图onBackPressed,这是替换碎片网不可能的。我附上截图和代码。

 public void changeFragment(final Fragment fragment, final String fragmenttag) 
    try 
        drawer_close();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction =
                fragmentManager.beginTransaction().addToBackStack(null);
        fragmentTransaction.add(R.id.frame, fragment, fragmenttag);
        fragmentTransaction.commit();
     catch (Exception e) 
    

【问题讨论】:

在事务中尝试hide(Fragment) home 片段。 您只需要在第二个片段中设置背景或添加您的第二个片段 xml 我将添加答案 【参考方案1】:

添加片段时只需要添加背景即可。

add(): adds the new fragment on the top of another fragment that's why you can see below fragment

replace(): removes everything then adds the new fragment

【讨论】:

【参考方案2】:

添加和替换的工作方式完全不同,而替换从膨胀的视图组中删除当前片段。 add 方法只是在 ViewGroup 中添加新的布局。这就是为什么你可以看到你的片段,这就是为什么它的可点击只是将它们视为普通视图而不是片段。现在您可以将白色背景添加到第二个片段的根布局并使其可点击它应该可以解决您的所有问题。

【讨论】:

以上是关于当我使用 fragmentTransaction.add 方法时片段重叠的主要内容,如果未能解决你的问题,请参考以下文章

为啥要使用 FrameLayout 作为 FragmentTransaction 的片段容器? [复制]

使用 getFragmentManager().beginTransaction() 在 Android 中为 FragmentTransaction 键入不匹配

FragmentTransaction 隐藏/显示有时不起作用

FragmentTransaction 没有做任何事情

片段内容未在 BottomNavigationView FragmentTransaction 上加载

使用 FragmentTransaction.attach() 和 detach() 时不保留 Fragment ui