ViewPager+Fragment懒加载

要想实现Fragment的懒加载首先介绍两个方法:

void setUserVisibleHint(boolean isVisibleToUser)

boolean getUserVisibleHint()

它们分别用作设置/获得Fragment可见状态,我们可以重写Fragment在其中做判断.

public class MyFragment extends Fragment {  
    private boolean isInit; // 是否可以开始加载数据  
  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
        isInit = true;  
        return inflater.inflate(R.layout.fragment_my, container, false);  
    }  
  
    @Override  
    public void onViewCreated(View view, Bundle savedInstanceState) {  
        super.onViewCreated(view, savedInstanceState);  
        /* 初始化控件 */  
    }  
  
    @Override  
    public void onResume() {  
        super.onResume();  
        // 判断当前fragment是否显示  
        if (getUserVisibleHint()) {  
            initViewAndData ();  </span>
        }  
    }  
  
    @Override  
    public void setUserVisibleHint(boolean isVisibleToUser) {  
        super.setUserVisibleHint(isVisibleToUser);  
        // 每次切换fragment时调用的方法  
        if (isVisibleToUser) {  
           initViewAndData();
  
        }  
    }  
  
    /** 
     * 初始化数据 
     */  
    private void initViewAndData() {  
        if (isInit) {  
            isInit = false;//加载数据完成  
            // 加载各种数据  
        }  
    }  
}   

一般情况下ViewPager与fragment配合使用肯定不止一个fragment,每个fragment都这样不累死。。。不会偷懒的程序猿都不是好猿。

抽取一个BaseFragment出来

public abstract class BaseFragment extends Fragment {

    protected View rootView = null;
    protected TextView tv_title;
    protected EditText et_home_search;
    /**
     * 是否开始加载
     */
    protected  boolean isLoad=false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        isLoad=true;
	return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onResume() {
        super.onResume();
        /**
         * 判断当前fragment是否显示
         */
        if(getUserVisibleHint()){
            initViewAndData();
        }
    }


    /**
     * 初始化布局以及数据
     */
    public abstract void initViewAndData();

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        /**
         * 每次切换fragment时调用的方法
         */
        if(isLoad){
            initViewAndData();
        }
    }

}
使用的时候直接继承BaseFragment,这里需要注意的是重写了 initViewAndData()方法后记得判断一下.

 private void initViewAndData() {  
        if (isInit) {  
            isInit = false;//加载数据完成  
            // 加载各种数据  
        }  
    }  






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值