最近看到一篇微信文章,讲的是ViewPager + Fragment的懒加载。博主以前也遇到过这样的问题,要在APP启动的时候判断从网络获取的一个字段,来确定是否隐藏一个列表的item,当时直接在主Activity里获取字段,然后设置item显示状态,结果发现每次服务器动态改变字段后,APP根本不按照字段来显示/隐藏item,打log后发现在进入APP的时候,ViewPager的预加载属性在捣鬼,主Activity里字段还没获取,结果ViewPager第三个页面就已经加载出来了。后来开线程解决了问题。由于深有体会,所以今天就写写ViewPager+Fragment,顺便应用LazyLoad,在此感谢原博主尹star。
先晒图:
免积分下载链接:
http://download.csdn.net/detail/black_dreamer/9579555
ViewPager + Fragment做可点击、滑动翻页的介绍资料,在网络上已经有一大堆了,我就不细说啦,简单总结下有以下几点:
布局上分为Activity布局(ViewPager+底部菜单一堆),Fragment布局(每一个Fragment对应相应的布局)
创建自定义Fragment类,页面有几个就创建几个,在
onCreateView
方法里从布局中获得view并返回
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home,container,false) ;
return v ;
}
- 创建自定义的Adapter,继承自
FragmentStatePagerAdapter
或者FragmentPagerAdapter
public class FragmentAdapter extends FragmentStatePagerAdapter {
public List<Fragment> mFragments ;
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
public FragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.mFragments = fragments;
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
- 在Activity中实例化自定义的几个Fragment类,并添加到List中,用List创建并初始化自定义的Adapter,然后用ViewPager的setAdapter方法去设置就可以了。
- 底部菜单的点击选中,可以通过
ViewPager.setCurrentItem
方法去设置ViewPager当前选中的页面,按钮显示效果嘛,就用selector+动态设置背景图片就可以了。