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

 

 

 

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

 

 

 

 

 

PS:主要功能

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

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

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

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

5.数据的存储

 

 

思路

首先确定页面如何进行分离,底部的功能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;

 

 

 

  • 0
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值