当你面试的时候,被问到关于Fragment的种种

前言不知道你们都没有自己特别的学习的方法,我是有吧所有的整理成笔记的习惯比如今天讲解的关于Fragment的我会做成笔记由于文章有些地方代码过于太长了繁琐,所以部分省略掉了,敲了一下午眼睛和手脖子都酸了,至于省略的部分,对这些笔记,面试内容感兴趣的可以看笔记研究,欢迎留言把最近的知识也整理汇总了一份,打算和之前的知识做个汇总的PDF,有兴趣的可以借鉴学习一下知识汇总的PDF相关内容...
摘要由CSDN通过智能技术生成

前言

不知道你们都没有自己特别的学习的方法,我是有吧所有的整理成笔记的习惯
比如今天讲解的关于Fragment的我会做成笔记

由于文章有些地方代码过于太长了繁琐,所以部分省略掉了,敲了一下午眼睛和手脖子都酸了,至于省略的部分,对这些笔记,面试内容感兴趣的可以看笔记研究,欢迎留言

把最近的知识也整理汇总了一份,打算和之前的知识做个汇总的PDF,有兴趣的可以借鉴学习一下

知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找
https://github.com/xiangjiana/Android-MS
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

一丶Fragment 的使用

实现很简单,创建一个的布局,然后在 Activity 里点击时替换 Fragment

  mFragmentManager = getSupportFragmentManager(); 
  mFragmentManager.beginTransaction() 
    .replace(R.id.fl_content, fragment) 
    .commitAllowingStateLoss();

代码很简单,核心就三步:

  1. 创建 Fragment
  2. 获取 FragmentManager
  3. 调用事务,添加、替换

我们一步步来了解这背后的故事。
Fragment 大家应该比较熟悉,放到最后。
先来看看 FragmentManager
####二丶 FragmentManager

  public abstract class FragmentManager {...}

FragmentManager 是一个抽象类,定义了一些和 Fragment 相关的操作和内部类/接口。

2.1.定义的操作

FragmentManager 中定义的方法如下:

   //开启一系列对 Fragments 的操作 
   public abstract FragmentTransaction beginTransaction(); 

   //FragmentTransaction.commit() 是异步执行的,如果你想立即执行,可以调用这个方法 
  public abstract boolean executePendingTransactions();

   //根据 ID 找到从 XML 解析出来的或者事务中添加的 Fragment 
   //首先会找添加到 FragmentManager 中的,找不到就去回退栈里找 
   public abstract Fragment findFragmentById(@IdRes int id); 

   //跟上面的类似,不同的是使用 tag 进行查找 
   public abstract Fragment findFragmentByTag(String tag); 

   //弹出回退栈中栈顶的 Fragment,异步执行的 
   public abstract void popBackStack(); 

   //立即弹出回退栈中栈顶的,直接执行哦 
   public abstract boolean popBackStackImmediate();
   ......

可以看到,定义的方法有很多是异步执行的,后面看看它究竟是如何实现的异步。

2.2.内部类/接口:

  • BackStackEntryFragment 后退栈中的一个元素
  • onBackStackChangedListener:后退栈变动监听器
  • FragmentLifecycleCallbacks: FragmentManager 中的 Fragment 生命周期监听
  //后退栈中的一个元素 
  public interface BackStackEntry { 
    //栈中该元素的唯一标识 
    public int getId(); //获取 FragmentTransaction#addToBackStack(String) 设置的名称 public String getName(); 

    @StringRes 
    public int getBreadCrumbTitleRes(); 
    @StringRes 
    public int getBreadCrumbShortTitleRes(); 
    public CharSequence getBreadCrumbTitle();
    public CharSequence getBreadCrumbShortTitle(); 
  }

可以看到 BackStackEntry 的接口比较简单,关键信息就是 ID 和 Name。

  //在 Fragment 回退栈中有变化时回调 
  public interface OnBackStackChangedListener { 
     public void onBackStackChanged(); 
  }
  //FragmentManager 中的 Fragment 生命周期监听 
     public abstract static class FragmentLifecycleCallbacks { 
        public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {} 
        public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {} 
        public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {} 
        public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {} 
        public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {} 
        public void onFragmentStarted(FragmentManager fm, Fragment f) {} 
        public void onFragmentResumed(FragmentManager fm, Fragment f) {} 
        public void onFragmentPaused(FragmentManager fm, Fragment f) {} 
        public void onFragmentStopped(FragmentManager fm, Fragment f) {} 
        public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {} 
        public void onFragmentViewDestroye
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值