Android 实现答题、做题功能(多选、单选、材料、填空)

 

 

 

新接手项目里面有个做题功能,之前项目的做题是用RN做的渲染,现在看他是用原生实现的。 既然用原生,要实现左右滑动和题目跳转这些功能,除了ViewPager应该是没有一个能打的。

 

 

 

 

 

PS:主要功能

1.单选题、多选题、材料题等等(填空、问答、判断)

2.单选题点击答案自动跳转下一题,顶部题数跟着改变

3.左右滑动进行换题,最后一题进行提示

4.题卡的跳转和交卷弹窗

5.数据的存储

 

 

Android 实现答题、做题功能(多选、单选、材料、填空)_第1张图片

思路

首先确定页面如何进行分离,底部的功能Icon是不变的,所以可以放在Activity中;上面的题型和做题序号可变,但是可变性不大,可以放在公共VIew;中间的做题本身的内容是可变的(题型可变),可以根据加载不同的XML进行渲染。

实现方式

ViewPager + PagerAdapter(根据不同Type实现多种View)

主要是在PagerAdapte的重写方法instantiateItem中。

 @Override
    public 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;
    }

这里面有个封装,就是对不同题型页面进行单独自定义,重点是在BasehomeWorkQuestionWidget

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

 

 

 

 

 

 

 

 

 

 

Demo地址:

https://github.com/spuermax/SuperTest(里面包含很多平常自己用的demo例子)

搜索QuestionActivity页面

case R.id.tv_question:
                intent2Activity(QuestionActivity.class);
                break;

 

 

 

你可能感兴趣的