Android 关于FragmentTabhost中Fragment状态保持的理解

以下是个人观点,欢迎指正!微笑

  最近项目中使用FragmentTabHost,有些心得跟大伙分享下。  

  好多人苦恼“使用FragmentTabHost的时候,Fragment不能保持状态,每次都会刷新画面“,最近试验发现:

在切换FragmentTabHost的标签的时候,确实每次都触发一遍Fragment的生命周期函数,例如,onActivityCreated等,

而且,我们通常对Fragment的控件以及数据的初始化处理也是写到这些生命周期函数的,这样就导致了,每次重新获取数据,

并刷新画面的问题。

  最近才注意到,FragmentTabHost切换Tab标签时,Fragment的实例是不变的,不会每次都new一个新的Fragment实例,这样,

Fragment实例中的成员变量(数据集合、控件的实例等)就是不变的,而且画面的表现也就是Fragment对应的View的实例也是

不变的(例如,listview滚动后停留在哪一行时,再次切换回这个Fragment时,还会停留在哪一行,前提数据集没有更新)。

  所以,在使用FragmentTabHost的时候,对Fragment的控件和数据集的初始化处理就要注意了,既然数据集合、控件的实例没有变,

那么,在Fragment的生命周期函数中就没有必要再次赋值了,可以加上控件!=null时,才findViewById去赋值之类的处理。

  另外,如果Fragment首次创建时,需要请求数据等处理的话,可以尝试着,把这些数据请求的处理放到FragmenHost所在的Activity的

onCreate等方法中,Activity的生命周期函数只会调用一次。如何把在Activity中请求的数据传递给Fragment的话,可以使用EventBus之类

的工具,形式不限。

  以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值