全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

关于Android Fragment对回退栈的详细理解

目录
  • 测试项目
  • 结论

测试项目

FragmentActivity

public class FragmentActivity extends AppCompatActivity {
    private FrameLayout frameLayout;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        frameLayout = findViewById(R.id.fl_content);
        button = findViewById(R.id.btn_click);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fTwo = new FragmentOne();
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction tx = fm.beginTransaction();
                tx.replace(R.id.fl_content, fTwo, "One");
                tx.addToBackStack(null);//添加回退栈
                tx.commit();
                System.out.println("fm.getBackStackEntryCount() = " + fm.getBackStackEntryCount());
            }
        });
    }
}

FragmentOne(FragmentTwo、FragmentThree同理)

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View mView = inflater.inflate(R.layout.fragment_one, container, false);
        editText = mView.findViewById(R.id.et_input);
        button = mView.findViewById(R.id.btn_next);
        System.out.println("mView.findViewById = "+editText);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fTwo = new FragmentTwo();
                FragmentManager fm = getActivity().getSupportFragmentManager();
                FragmentTransaction tx = fm.beginTransaction();
                tx.replace(R.id.fl_content, fTwo, "TWO");
                tx.addToBackStack(null);
                tx.commit();
                System.out.println( "fm.getBackStackEntryCount() = "+ fm.getBackStackEntryCount());
            }
        });

        return mView;
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d("Tina======>", "onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d("Tina======>", "onDestroyView"+editText);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d("Tina======>", "onDetach");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("Tina======>", "onDestroy");
    }

前提条件是添加fragmet的时候都是用的replace(先remove 后add)

操作1:全部添加回退栈的操作

生命周期开启的时候,打开到第三个fragment

开启.png

回退的时候

结束.png

操作2:fragmentOne不加回退栈,其他加

生命周期开启的时候

开启.png

回退的时候

结束.png

结论

1.replace 会销毁视图,生命周期走到了onDestroyView

2.加入回退栈,返回的时候,fragment还可以重新显示出来,否则返回的时候,就直接销毁了

3.加入回退栈后,返回时会重新走onCreateView方法,重新绑定视图,也就是说,实例对象会变

举例:recyclerview的话,返回来后,之前setAdapter就没有了,因为对象换了

注意有一个还会是原来的值,是因为它对数据有保存,他就是edictText(要有id值)


# Android Fragment回退栈  # Android Fragment回退栈详解  # Android Fragment回退栈实例  # Android Fragment 基本了解(图文介绍)  # Android 管理Activity中的fragments  # Android基础之使用Fragment控制切换多个页面  # android开发教程之实现滑动关闭fragment示例  # FrameLayout和Fragment处理Android应用UI布局实例  # Android的Fragment的生命周期各状态和回调函数使用  # Android App中使用ViewPager+Fragment实现滑动切换效果  # Android App中ViewPager与Fragment结合的一些问题解决  # Android程序开发之Fragment实现底部导航栏实例代码  # 详解Android应用中DialogFragment的基本用法  # 都是  # 是因为  # 还可以  # 还会  # 要有  # 就没  # 换了  # 不加  # 绑定  # 它对  # 到第  # 有一个  # 前提条件  # 也就是说  # super  # onCreate  # id  # fl_content  # btn_click  # Bundle 


相关文章: 宁波自助建站系统如何快速打造专业企业网站?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  PHP正则匹配日期和时间(时间戳转换)的实例代码  c# 在ASP.NET Core中管理和取消后台任务  详解jQuery停止动画——stop()方法的使用  如何彻底卸载建站之星软件?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何通过FTP空间快速搭建安全高效网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何基于云服务器快速搭建网站及云盘系统?  长沙做网站要多少钱,长沙国安网络怎么样?  做企业网站制作流程,企业网站制作基本流程有哪些?  高性价比服务器租赁——企业级配置与24小时运维服务  如何快速建站并高效导出源代码?  Swift中循环语句中的转移语句 break 和 continue  临沂网站制作公司有哪些,临沂第四中学官网?  建站VPS选购需注意哪些关键参数?  宝塔新建站点报错如何解决?  建站之星×万网:智能建站系统+自助建站平台一键生成  建站之星上传入口如何快速找到?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  常州自助建站工具推荐:低成本搭建与模板选择技巧  建站之星如何快速更换网站模板?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在云服务器上快速搭建个人网站?  移民网站制作流程,怎么看加拿大移民官网?  北京的网站制作公司有哪些,哪个视频网站最好?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  香港服务器租用每月最低只需15元?  如何通过万网虚拟主机快速搭建网站?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  制作网站怎么制作,*游戏网站怎么搭建?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在七牛云存储上搭建网站并设置自定义域名?  制作公司内部网站有哪些,内网如何建网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  网站制作知乎推荐,想做自己的网站用什么工具比较好?  贸易公司网站制作流程,出口贸易网站设计怎么做?  建站之星如何优化SEO以实现高效排名?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何在阿里云高效完成企业建站全流程?  建站主机类型有哪些?如何正确选型  全景视频制作网站有哪些,全景图怎么做成网页?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  一键网站制作软件,义乌购一件代发流程?  如何在VPS电脑上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。