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中

效果

image-20200825111421109

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));
    }
}

https://www.kaelli.com/30.html

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 协议 ,转载请注明出处!