多个fragment之间切换加载数据卡顿
2016-08-22 11:26 百度乜搜不到 阅读(1198) 评论(0) 编辑 收藏 举报Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。有可能会导致卡顿。
就需要用到Fragment里的setUserVisibleHint这个方法里。
解决办法
package com.xgs.panku.ui;
import android.app.Fragment;
/**
* 类描述:当切换到这个fragment的时候初始化控件
* 作者:@zyx
* 时间:2016/8/22 11:10
* 邮箱:zhangyuanxiao@monster-tld.com
*/
public abstract class BaseFragment extends Fragment{
//判断是否显示
protected boolean isVisible;
/**
* 在这里实现Fragment数据的缓加载.
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()){
isVisible = true;
//加载数据
onVisible();
}else{
isVisible = false;
onInvisible();
}
}
/**
* fragment被设置为可见时调用
*/
protected void onVisible(){
isLoading();
}
/**
* fragment被设置为不可见时调用
*/
protected void onInvisible(){}
//获取数据的抽象方法
protected abstract void isLoading();
}
调用方式:
- // 判断是否加载
- private boolean isPrepared;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- Log.d(LOG_TAG, "onCreateView");
- View view = inflater.inflate(R.layout.fragment_open_result, container, false);
- //XXX初始化view的各控件
- isPrepared = true;
- lazyLoad();
- return view;
- }
- @Override
- protected void isLoading() {
- if(!isPrepared || !isVisible) {
- return;
- }
- //填充各控件的数据
- }