【Demo记录】Fragment 返回栈

效果

这里写图片描述
toast打印的是返回之前显示的fragment的标记
点击返回键时,不会直接退出activity,而是返回到之前显示的Fragment(当前显示的是首页时,直接退出Activity)


Fragment 知识点

1、Fragment和Activity关联的主要方式在于:添加、替换

通过Activity中Fragment的管理器,将Fragment添加到Activity指定的布局中,每一次添加Fragment都会在原界面的基础上添加Fragment,可以理解为在原Fragment的基础上又覆盖了一层,如果Fragment之间背景透明,可以看到各个添加的Fragment内容重叠,所以,一般在第一个将Fragment显示到界面上时使用addFragment方式,要改变Fragment的内容,则通过replaceFragment来进行。替换的方式,不会出现内容重叠的情况。

2、Fragment 返回栈

Fragment 依附于Activity来做内容的显示,当在Activity中点击返回按钮时,这个Activity将会销毁。想点击返回实现Fragment的返回,而不是直接退出Activity,则需要使用到返回栈。

返回栈的相关操作:入栈、出栈、获取返回栈里的个数

入栈:addToBackStack(@Nullable String name);
示例代码:

FragmentManager mSupportFragmentManager = getSupportFragmentManager();
mSupportFragmentManager.beginTransaction()
        .replace(R.id.frameLayout_content, fragments[0], "first")
        .addToBackStack("first")
        .commit();

出栈

popBackStack();//将返回栈里面的栈顶元素pop出栈
popBackStack(String name,int flags);//将标记为name之上的元素全部移除,flags表示标记为name的这个元素是否需要出栈,0表示不需要,POP_BACK_STACK_INCLUSIVE表示该元素需要出栈。
popBackStack(int id,int flags);//将栈里面位置在id上面的元素都移除,根据flags来判断是否移除该位置的元素。
popBackStackImmediate();//和上面相比,只是多了个Immediate 表示立即执行,其余的参数 则和上面一致。
popBackStackImmediate(String name,int flags);
popBackStackImmediate(int id,int flags);

获取返回栈中元素的个数
getBackStackEntryCount();

期间遇到的问题:在onCreate中执行获取的个数一直为0,解决方案:
在获取个数之前 使用executePendingTransitions();

最后还有一种获取元素个数有问题的操作,在onPressBack中进行的操作,详情 直接跳到文章末尾。

解决方案参考自:
http://stackoverflow.com/questions/13964409/why-fragmentmanagers-getbackstackentrycount-return-zero


Demo

界面设计:

这里写图片描述

Activity Layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"</
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值