当前位置: 代码迷 >> 综合 >> ViewPager + PagerAdapte的使用
  详细解决方案

ViewPager + PagerAdapte的使用

热度:65   发布时间:2023-11-17 10:54:56.0

之前写过一篇TabLayout  + ViewPager + Fragment  文章。  TabLayout + ViewPager + Fragment

近期在做题库页面,用到ViewPager 和 PagerAdapter,所以想要简单的记录一下。  答题功能

 

主要技术点

1.ViewPager常用API

2.PagerAdapter重写方法介绍

3.VIewPager + PagerAdapter使用介绍

3.ViewPager滑动速度自定义

 

 

ViewPager常用API

可参考ViewPager

1.setAdapter(PagerAdapter adapter)// 设置适配器函数,和ListView同理
2.setCurrentItem(int item) // 设置当前要显示的页面
3.setOffscreenPageLimit(int limit)// 设置默认缓存页面数量
4.addOnPageChangeListener(ViewPager.OnPageChangeListener listener) //设置ViewPager事件监听   (重写三个方法onPageScrolled、onPageSelected、onPageScrollStateChanged)

 

PagerAdapter使用介绍

  

/*
*获取pager的个数
*/@Overridepublic int getCount() {return mList.size();}
/*
*移除一个给定索引的View
*/
@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView((View) object);}
/*
*判断是否是当前View
*/@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}/*
*给container添加View
*/@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {...return scrollView;}

 

3.VIewPager + PagerAdapter使用介绍

1)Activity的XML里面添加控件View

2)Activity中PagerAdater设置给ViewPager

    public ArrayList<HomeworkQuestionBean> mQuestionList = new ArrayList<>();@Overridepublic void initData(Bundle savedInstanceState) {for (int i = 0; i < 10; i++) {ArrayList<String> metas = new ArrayList<>();metas.add("宪法");metas.add("法律");metas.add("行政法规");metas.add("行政规章");HomeworkQuestionBean homeworkQuestionBean1 = new HomeworkQuestionBean();homeworkQuestionBean1.type = HomeworkQuestionBean.HomeworkQuestionTypeBean.single_choice;homeworkQuestionBean1.setMetas(metas);homeworkQuestionBean1.setStem("1、下列发的形式中,由全国人民代表大会及其常务委员会经一定立法程序制定颁布," +"调整国家、社会和公民生活中基本社会关系的是()。");mQuestionList.add(homeworkQuestionBean1);}mAdapter = new QuestionPagerAdapter(getContext(), results);viewPager.setAdapter(mAdapter);}

 

Adapter

public class QuestionPagerAdapter extends PagerAdapter {protected LayoutInflater inflater;protected Context mContext;protected ArrayList<HomeworkQuestionBean> mList;public QuestionPagerAdapter(Context context, ArrayList<HomeworkQuestionBean> list) {mList = list;mContext = context;inflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return mList.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view == object;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView((View) object);}@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {HomeworkQuestionBean questionBean = mList.get(position);View view = switchQuestionWidget(questionBean, position + 1, mList.size());ScrollView scrollView = new ScrollView(mContext);scrollView.setFillViewport(true);scrollView.setVerticalScrollBarEnabled(false);scrollView.addView(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);container.addView(scrollView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);return scrollView;}private View switchQuestionWidget(HomeworkQuestionBean question, int index, int totalNum) {BaseHomeworkQuestionWidget mWidget;HomeworkQuestionBean.HomeworkQuestionTypeBean typeBean = question.getType();int layoutId = 0;switch (typeBean) {case choice:case uncertain_choice:layoutId = R.layout.item_pager_homework_question_choice;break;case single_choice:layoutId = R.layout.item_pager_homework_question_singlechoice;break;case essay:layoutId = R.layout.item_pager_homework_question_essay;break;case determine://判断题layoutId = R.layout.item_pager_homework_question_determine;break;default:break;}mWidget = (BaseHomeworkQuestionWidget) LayoutInflater.from(mContext).inflate(layoutId, null);mWidget.setData(question, index, totalNum);return mWidget;}}

 

PS:感觉这篇文章写得很LOW,就当是记录了。

 

4.ViewPager滑动速度自定义

public class ExamViewPager extends ViewPager {public ESExamViewPager(@NonNull Context context) {super(context);initView();}public ExamViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);initView();}private void initView() {try {Class clazz = Class.forName("android.support.v4.view.ViewPager");Field f = clazz.getDeclaredField("mScroller");FixedViewPagerSpeedScroller fixedSpeedScroller =new FixedViewPagerSpeedScroller(getContext(), new LinearOutSlowInInterpolator());fixedSpeedScroller.setmDuration(300);f.setAccessible(true);f.set(this, fixedSpeedScroller);} catch (Exception e) {e.printStackTrace();}}
}

 

OK。

 

 

  相关解决方案