ViewPager用法
一、使用FragmentPagerAdapter
1.配合FragmentPagerAdapter + TabLayout
1.1.activity布局文件中使用viewpager标签和TabLayout标签
1.2.创建适配器:自定义类继承FragmentPagerAdapter
1.3.viewpager设置适配器
1.4.tablayout.setupWithViewPager(viewPager);
public class MyPagerAdapter extends public class MyPagerAdapter extends FragmentPagerAdapter {
//重写getItem()和getCount()方法,并添加构造器
public MyPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
return null;
}
@Override
public int getCount() {
return 0;
}
}
getItem中获得Fragment对象,新建的可以存入hashmap中
效果

2.配合FragmentPagerAdapter + 第三方指示器库(himalaya)
fragment存入hashmap
3.NoScrollViewPager+FragmentPagerAdapter + 左侧expandlistview(评估师)
//切换
viewpager.setCurrentItem(index, false);
二.使用FragmentStatePagerAdapter
和上面一样的,只是FragmentStatePagerAdapter适合比较多的Fragment
三、自定类继承PagerAdapter
重写4个方法
默认重写
getCount()
isViewFromObject()
如果需要滑动效果还需要下面3个
instantiateItem()是用于往viewpage中添加控件,添加内容
destroyItem()是加入页面的时候,默认缓存三个,如不做处理,滑多了程序就会蹦
getPageTitle是展示和viewpager上面tltle的展示文字的效果
public class AdapterViewpager extends public class AdapterViewpager extends PagerAdapter {
private List mViewList;
public AdapterViewpager(List mViewList) {
this.mViewList = mViewList;
}
@Override
public int getCount() {//必须实现
return mViewList.size();
}
//判断是否是否为同一张图片,这里返回方法中的两个参数做比较就可以
@Override
public boolean isViewFromObject(View view, Object object) {//必须实现
return view == object;
}
//设置viewpage内部东西的方法,如果viewpage内没有子空间滑动产生不了动画效
@Override
public Object instantiateItem(ViewGroup container, int position) {//必须实现,实例化
container.addView(mViewList.get(position));
return mViewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mViewList.get(position));
}
}
Fragment + bottombar
点击底部item ,show当前item,hide其他item . (没有add则先add)
mBottomBar.setOnTabSelectedListener(mBottomBar.setOnTabSelectedListener(new BottomBar.OnTabSelectedListener() {
@Override
public void onTabSelected(int position, int prePosition) {
if (position >= fragments.length || prePosition >= fragments.length) {
return;
}
// 获取要显示的 fg 并且显示它
BaseViewFragment fragment = getFragment(position);
FragmentTransaction trx = getSupportFragmentManager().beginTransaction();
if (fragment != null && !fragment.isAdded()) {
trx.add(R.id.fl_container, fragment);
}
trx.show(fragment);
// 获取要隐藏的 fg 隐藏它
BaseViewFragment fragmentHide = getFragment(prePosition);
if (fragmentHide != null && fragmentHide.isAdded()) {
trx.hide(fragmentHide);
}
trx.commitAllowingStateLoss();
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!