天天看点

viewpager+fragment之fragment懒加载

今天讲

advancedpagerslidingtabstrip取消预加载

首先我使用的viewpager+fragment还有viewpaget的指示器,三者结合着去做的

这里面viewpager指示器我用的第三方的框架 AdvancedPagerSlidingTabStrip

AdvancedPagerSlidingTabStrip是一种Android平台的导航控件,完美兼容Android自带库和兼容库的ViewPager组件,最低支持Android api v9。

支持一下功能:

支持Tab小圆点以及数量显示和隐藏

支持自定义Tab View

支持使用Bitmap、Drawable和本地resId来显示Tab图标

支持对Tab图标替换成自定义View来加载网络图片

支持自由设置小圆点、tab大小和位置等设置

支持实现如:微博等不均匀Tab的APP风格,并支持滑动

效果图这里就略了,这是项目地址自己去看 https://github.com/HomHomLin/AdvancedPagerSlidingTabStrip

这里借用的上篇Android 仿QQ首页的消息和电话的切换的案例

这里使用的是在fragment中继承setUserVisibleHint这个方法,

该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,

即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。

a主要是做标记表示第一次进来时加载一次,其他时候进来不从新加载,不过如果有需求时可以把这个去掉

讲初始化数据放在这里面可以实现懒加载,

另外一中viewpager懒加载模式是完全从写viewpager,并修改其中的某个值这个方法以后我会交大家的

这个例子是使用了advancedpagerslidingtabstrip这个第三方框架

public class ProductFragment extends Fragment implements ViewPager.OnPageChangeListener {


    public CustomPagerSlidingTabStrip mAPSTS;
    public APSTSViewPager mVP;
     private int a = ;
    private static final int VIEW_FIRST = ;
    private static final int VIEW_SECOND = ;
    private static final int VIEW_SIZE = ;
    private Context mContext;
    private GudingFragment mFirstFragment = null;
    private ConvertibleFragment mConvertibleFragment = null;
    private View view;

    public static ProductFragment instance(Context mContext1) {
        ProductFragment view = new ProductFragment();

        return view;
    }
    //这里做了个判断,如果是第一次进来并且显示的是当前fragment那么久加载一次
    //同时这样还可以防止重复加载
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && a == ) {
            init();
            a++;
        }
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_product, null);
        findViews(view);
        return view;
    }

    private void findViews(View view) {
        mAPSTS = (CustomPagerSlidingTabStrip) view.findViewById(R.id.tabs2);
        mVP = (APSTSViewPager) view.findViewById(R.id.vp_main);
    }

    private void init() {
        mVP.setOffscreenPageLimit();
        FragmentAdapter adapter = new FragmentAdapter(getChildFragmentManager());

        mVP.setAdapter(adapter);
        //屏蔽掉滑动事件
        mVP.setNoFocus(true);
        adapter.notifyDataSetChanged();
        mAPSTS.setViewPager(mVP);
        mAPSTS.setOnPageChangeListener(this);
    }


    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }