viewpager+fragment 게으름 불러오기 작업

3324 단어 android
프로젝트에서 Tablayout+viewpager+fragment 조합을 사용한 것도 현재 app에서 매우 유행하는 디자인입니다.
viewpager가 페이지를 전환할 때fragment가 불러오기를 게을리 하는 것은 비교적 좋은 체험이고 유량을 절약하며 미리 불러올 때 발생하는 끊기는 현상을 피한다.
게으름 피우기 작업은fragment의 setUserVisibleHint () 및 getUserVisibleHint () 방법에 주로 사용됩니다
setUserVisibleHint () 방법은viewpageradapter 내부에서 호출되며fragment에 값을 부여합니다.fragment가 보이지 않으면false입니다.반대로 true입니다.
getUserVisibleHint () 방법은 이 값을 가져오는 것입니다.fragment에서 현재 볼 수 있는지 여부를 통해 데이터를 불러오는 작업을 합니다. 이렇게 하면 미리 불러오는 기능을 실현할 수 있습니다.
package cn.cibn.haokan.ui.categoryList;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import cn.cibn.haokan.ui.base.ImgBaseFragment;

public abstract class LazyFragment extends ImgBaseFragment{
	
	 /**
     * Fragment title
     */
    public String fragmentTitle;
    /**
     *       
     */
    private boolean isVisible;
    /**
     *    ,View       。
     * 2016/04/29
     *  isAdded()    
     * 2016/05/03
     * isPrepared     ,isAdded     onCreateView     isAdded 
     */
    private boolean isPrepared;
    /**
     *        
     */
    private boolean isFirstLoad = true;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //   viewpager     setOffscreenPageLimit        
        //    Fragment onCreateView       (           )
        //   initData    ,       
        // isFirstLoad = true;

        // 2016/04/29
        //    isFirstLoad = true    ,      initData         
        // onCreateView         FragmentManager initData     .
        //           Bug   initViews              list.clear();
        isFirstLoad = true;
        View view = initViews(inflater, container, savedInstanceState);
        isPrepared = true;
        lazyLoad();
        return view;
    }

    /**
     *     ViewPager    ,    setUserVisibleHint
     *
     * @param isVisibleToUser        
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }

    /**
     *      FragmentTransaction show hide        ,    onHiddenChanged.
     *      show Fragment            hide show
     *
     * @param hidden hidden True if the fragment is now hidden, false if it is not
     *               visible.
     */
    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (!hidden) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }

    protected void onVisible() {
        lazyLoad();
    }

    protected void onInvisible() {
    }

    /**
     *        Fragment  ,    onCreateView
     * isPrepared = true;
     */
    protected void lazyLoad() {
        if (isPrepared && isVisible && isFirstLoad) {
            isFirstLoad = false;
            initData();
        }
    }

    protected abstract View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);

    protected abstract void initData();
}

좋은 웹페이지 즐겨찾기