Android Fragments 如何从另一个片段中删除当前添加的子片段?

nnsrf1az  于 2022-11-24  发布在  Android
关注(0)|答案(4)|浏览(174)

我有3个片段,如片段A,片段B,片段C。最初片段A被加载,片段A添加片段B,类似地片段B再次添加片段C。现在,当我点击backpress或片段C中的任何按钮时,它直接显示片段A。为什么它不显示片段B?我只想删除当前片段C并显示片段B,但请帮助我。这是我的代码。

//This is FragmentA and it adds FragmentB
 fragmentManager = getSupportFragmentManager();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.add(R.id.activity_main,new FragmentB());
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

//This is FragmentB and it adds FragmentC
FragmentManager fragmentManager = getChildFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.add(R.id.publicCommunication,new FragmentC());
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

//This is FragmentC and button is available remove cuurent fragment. now here is my problem , it removes both fragmentC and FragmentB and Shows FragmentA. I want it to show FragmentC but it is not showing it shows fragmentA.
 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentManager manager = getActivity().getSupportFragmentManager();
                 manager.popBackStackImmediate();
            }
        });
qlfbtfca

qlfbtfca1#

您正在调用活动片段管理器来弹出backstack,但此管理器似乎没有将弹出“传播”到子管理器
如下所示更改您的onClick代码

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentManager manager = getFragmentManager();
             manager.popBackStackImmediate();
        }
    });
f4t66c6m

f4t66c6m2#

在您代码中,您没有向backstack添加任何片段,您只是向Activity添加片段,因此您需要更改此行:-**fragmentTransaction.addToBackStack(null);-fragmentTransaction.addToBackStack(“使用您的唯一字符串”);
将其添加到两个片段事务中,然后提交。

y0u0uwnf

y0u0uwnf3#

用这个,

getFragmentManager().popBackStackImmediate();

代替

FragmentManager manager = getActivity().getSupportFragmentManager();
manager.popBackStackImmediate();

因为,它只能从活动中使用,而不能从片段中使用。

cxfofazt

cxfofazt4#

由于要将FragmentC添加到FragmentB的子FragmentManager中,因此必须从FragmentB的子FragmentManager(而不是从“活动”的supportFragmentManager)中移除/弹出FragmentC。
在Button click侦听器中,只需执行以下操作-
Kotlin:

parentFragment?.childFragmentManager?.popBackStack()

java 语:

getParentFragment().getChildFragmentManager().popBackStack()

相关问题