0
点赞
收藏
分享

微信扫一扫

Fragment实战重点内容以及注意的一些细节,阿里P8亲自讲解

雷亚荣 2022-02-02 阅读 46

FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务

transaction.add() //往Activity中添加一个Fragment

transaction.remove() //从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。

transaction.replace()

使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~

transaction.hide()

隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

transaction.show()

显示之前隐藏的Fragment

detach()

会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。

attach()

重建view视图,附加到UI上并显示。

transatcion.commit()//提交一个事务

不同于add remove ,detach和attach,只是移除view,重建view视图。

4、detach和attach

使用add()加入fragment时将触发onAttach(),使用attach()不会触发attach()

使用replace()替换后会将之前的fragment的view从viewtree中删除

触发顺序:

detach()->onPause()->onStop()->onDestroyView()

attach()->onCreateView()->onActivityCreated()->onStart()->onResume()

使用hide()方法只是隐藏了fragment的view并没有将view从viewtree中删除,随后可用show()方法将view设置为显示

而使用detach()会将view从viewtree中删除,和remove()不同,此时fragment的状态依然保持着,在使用attach()时会再次调用onCreateView()来重绘视图,注意使用detach()后fragment.isAdded()方法将返回false,在使用attach()还原fragment后isAdded()会依然返回false(需要再次确认)

执行detach()和replace()后要还原视图的话, 可以在相应的fragment中保持相应的view,并在onCreateView()方法中通过view的parent的removeView()方法将view和parent的关联删除后返回

5.fragment的实例化

一般很少直接new一个,因为有时候,实例化fragment时候需要传入参数。fragment有可能销毁重建自动实例化,自动实例化只会调用无参构造,参数就传不过去了。所以,一般用静态工厂实例化

public static FragmentLayout newInstance(String text) {

//budle携带参数,在oncreate里面获取到

Bundle args = new Bundle();

args.putString(“text”,text);

FragmentLayout fragment = new FragmentLayout();

fragment.setArguments(args);

return fragment;

}

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment_layout,null);

}

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

TextView pagerText = (TextView) view.findViewById(R.id.pager_text);

//获取budle里面值。

String string = getArguments().getString(“text”);

pagerText.setText(string);

}

6、fragment嵌套子fragment

里面用getChildFragmentManager

7、

防止fragment重复进行创建,加一个判断。只有savedInstanceState 为空时才进行实例化。

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

Log.e(TAG, savedInstanceState+"");

if(savedInstanceState == null)

{

mFOne = new FragmentOne();

FragmentManager fm = getFragmentManager();

FragmentTransaction tx = fm.beginTransaction();

最后说一下我的学习路线

其实很简单就下面这张图,含概了Android所有需要学的知识点,一共8大板块:

  1. 架构师筑基必备技能
  2. Android框架体系架构(高级UI+FrameWork源码)
  3. 360°Androidapp全方位性能调优
  4. 设计思想解读开源框架
  5. NDK模块开发
  6. 移动架构师专题项目实战环节
  7. 移动架构师不可不学习微信小程序
  8. 混合开发的flutter

Android学习的资料

我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。需要的小伙伴可以私信我【进阶】我免费分享给大家,或者直接点击下面链接领取,谢谢大家这么久以来的支持。

Android学习PDF+架构视频+面试文档+源码笔记

如果你有其他需要的话,也可以在GitHub上查看,下面的资料也会陆续上传到Github

330页PDF Android学习核心笔记(内含上面8大板块)

Android学习的系统对应视频

总结

我希望通过我自己的学习方法来帮助大家去提升技术:

  • 1、多看书、看源码和做项目,平时多种总结

  • 2、不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理

  • 3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习

  • 4、android的方向也很多,高级UI,移动架构师,数据结构与算法和音视频FFMpeg解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!

    进阶学习资料领取方式:GitHub

较感兴趣,就大胆的进阶吧!

进阶学习资料领取方式:GitHub

举报

相关推荐

0 条评论