Android基础常用组件——Fragment的创建,生命周期,与Activity通信,结合ViewPager使用的预加载和懒加载

一、创建

Fragment的子类,在Android P上面都被禁用,并被其他的替代

 

  1. 静态创建,在xml文件中添加fragment
  2. 动态创建,在java中使用FragmentTransaction动态添加

二、生命周期

                                

 

三、与Activity或者Fragment通信

  • FragmentManager.findFragmentById(),这种方法适用静态添加有id的Fragment,动态添加的那就无法查找,
  • interface,接口回调,
  • LocalBroadcastManager,广播是最简单灵活,
  • Fragment直接调用Activity中public方法,((MainActivity) getActivity()).showProByName(name); 

四、ViewPager的预加载和Fragment的懒加载

ViewPager的预加载机制:ViewPager会默认把当前页面的左右相邻界面进行初始化,这样的好处是左右滑动更加流畅,默认值为1,源码public void setOffscreenPageLimit(int limit) 方法可以看出,这个默认值无法更改(有网友使用低版本的V4包的ViewPager源码修改),本文默认不能更改,假装没看见;

public void setOffscreenPageLimit(int limit) {
	if (limit < DEFAULT_OFFSCREEN_PAGES) {
		Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to "
				+ DEFAULT_OFFSCREEN_PAGES);
		limit = DEFAULT_OFFSCREEN_PAGES;
	}
	if (limit != mOffscreenPageLimit) {
		mOffscreenPageLimit = limit;
		populate();
	}
}

 

Fragment的懒加载的产生就是为了优化ViewPager的预加载问题,

ViewPager结合Fragment的使用,因为预加载机制,会把当前Fragment的相邻两个Fragment创建好,就是这三个Fragment都执行完onAttach -->OnResume生命周期函数,这个时候如果存在加载大量数据或者图片耗内存的操作,就是要考虑懒加载,也就是Fragment显示的时候才会加载数据等操作,

这就用到了Fragment里面的public void setUserVisibleHint(boolean isVisibleToUser) 方法,

 

如果你的网络请求并不需要涉及UI更新,那么就可以直接在setUserVisibleHint(boolean isVisibleToUser) 里操作,

但是setUserVisibleHint(boolean isVisibleToUser) 方法是比onCreateView更早调用的,但是我们一般在加载数据时,都会在数据加载完成时进行UI更新,所以这就有了一个问题,假如拉取数据是秒回,但是我们还没有进行UI绑定,或者是Adapter初始化等,那么我们就无法更新UI了,所以Fragment给我们提供了另一个方法getUserVisibleHint(),它就是用来判断当前Fragment是否可见,所以我们就可以在一系列变量初始化完成后再判断是否可见,若可见再进行数据拉取:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
	super.setUserVisibleHint(isVisibleToUser);
	if (getUserVisibleHint()){//此处不能用isVisibleToUser进行判断,因为setUserVisibleHint会执行多次,而getUserVisibleHint才是判断真正是否可见的
        //dosomething
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值