android - fragment

2017-01-05  本文已影响0人  lemonxian

看了网上很多关于fragment的使用

在使用fragment的时候用到FragmentTransaction

主要就两种:一种Add  一种replace

网上很多人都说如果要保存fragment的数据的话,就用Add,然后show来控制,就可以复用fragment

但是这样会有一个问题,就是fragment依附的Layout下会有很多个fragment,影响性能

而用replace会释放掉Layout下绑定的fragment

经过测试

只要我们用集合把fragment存储起来就不会重复创建了

不知道这样的话对性能上有没有优化。。。源码看了还是不大理解。。。

这个写得感觉挺好的~

2017年2月9日16:30:04-----------------------------------------------

transaction.replace()相当于 transaction.remove() + transaction.add()

transaction.detach()相当于transaction.remove() + transaction.addToBackStack() ,

------------------------------------个人见解

正常remove()之后提交事务,fragment会销毁

执行onPause()——>onStop()——>onDestroyView()——>onDestroy()——>onDetach()

再显示的话会

调用onAttach()——>onCreate()——>onCreateView()——>onActivityCreated()——>onStart()——>onResume()

如果remove()之后加上transaction.addToBackStack(),就相当于执行transaction.detach(),

再提交事务的话,fragment会

执行onPause()——>onStop()——>onDestroyView()

执行transaction.attach(),再显示的话

调用onCreateView()——>onActivityCreated()——>onStart()——>onResume()

如果想要保存当前用户输入数据,切换到其他fragment就要用transaction.add(),添加之前一般做一个判断fragment.isAdded(),如果已经存在就show(),不存在才add(),如果直接

add()会执行

onAttach()——>onCreate()——>onCreateView()——>onActivityCreated()——>onStart()——>onResume()

然后transaction.hide()和transaction.show()控制。

一般会有一个map来保存fragment,但是这个

上一篇 下一篇

猜你喜欢

热点阅读