看了网上很多关于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,但是这个
网友评论