Android Fragment回退栈的使用

本文详细介绍了在Android中,如何通过管理Fragment回退栈来实现在从Fragment3回退时直接返回到Fragment1,主要涉及FragmentManager的使用和回退栈的操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有这样一个场景,从Fragment1跳转到Fragment2再跳转到Fragment3,

如何实现按下回退键直接从Fragment3返回Fragment1?

利用FragmentManager的getBackStackEntryCount() 来获取当前回退栈中Fragment的个数

如果大于1就循环弹出栈顶fragment

具体代码实现

public class FragmentActivity extends AppCompatActivity implements OnReplace {

    private FrameLayout frameLayout;

    private BlankFragment blankFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
        fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        blankFragment  = new BlankFragment();
        transaction.add(R.id.frameLayout, blankFragment);
        transaction.commit();
    }

    @Override
    public void onBackPressed() {
        // 获取当前回退栈中的Fragment个数
        int backStackEntryCount = fragmentManager.getBackStackEntryCount();
        //如果大于1 就做循环回退
        if (backStackEntryCount > 1) {
            while (fragmentManager.getBackStackEntryCount() > 0) {
                super.onBackPressed();
            }
        }
    }

    private FragmentManager fragmentManager;


    @Override
    public void onReplace(int index) {
        final BlankFragment2 blankFragment2 = new BlankFragment2();
        final BlankFragment3 blankFragment3 = new BlankFragment3();
        switch (index) {
            case 1:
                fragmentManager.beginTransaction()
                        .addToBackStack(null)
                        .replace(R.id.frameLayout,blankFragment2)
                        .commit();
                break;
            case 2:
                fragmentManager.beginTransaction()
                        .replace(R.id.frameLayout,blankFragment3)
                        .addToBackStack(null)
                        .commit();

                break;
        }
    }


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值