android实现动态生成答题卡页面(单选 判断 多选题)

实现效果图

实现思路:1:listView+动态添加布局

                  2:根据题目类型控制是否能多选或单选

实现主要代码:

//listView adapter里面代码实现 

layout布局 父布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="15dp"
        >

        <TextView
            android:id="@+id/tvposition"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableLeft="@mipmap/xing"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="5dp"
            android:textStyle="bold"
            android:textColor="#212121"
            />

        <TextView
            android:id="@+id/tvtitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="1.上海电信网厅的地址为sh.189.cn"
            android:textStyle="bold"
            android:textColor="#212121"
            />
    </LinearLayout>
  
   //动态添加的父布局
    <LinearLayout
        android:id="@+id/llContaint"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >

    </LinearLayout>
    
</LinearLayout>

item_options 子布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal"

    >
    <LinearLayout
        android:id="@+id/llRoot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        >


    <ImageView
        android:id="@+id/iv_type"
        android:layout_width="15dp"
        android:layout_height="15dp"
        android:background="@mipmap/single_in"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="20dp"
        />

    <TextView
        android:id="@+id/tv_optionName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对"
        android:layout_marginLeft="15dp"
        android:layout_gravity="center_vertical"
        android:textColor="#505050"
        android:textSize="16sp"
        />
    </LinearLayout>
</LinearLayout>
//动态加布局
holder.llContaint.removeAllViews();
for (int j = 0; j < mOptionListBeanList.size(); j++) {
    clickPotion = j;
    //item布局-----
    View choseView = LayoutInflater.from(context).inflate(R.layout.item_options, null);
    final LinearLayout llRoot = choseView.findViewById(R.id.llRoot);
    llRoot.setTag(j);
    ImageView ivType = choseView.findViewById(R.id.iv_type);
    TextView tvOptionName = choseView.findViewById(R.id.tv_optionName);
    if (!TextUtils.isEmpty(questionType)) {
        if ("1".equals(questionType)) {
            //单选
            ivType.setBackgroundResource(R.mipmap.single);
        } else if ("2".equals(questionType)) {
            //多选
            ivType.setBackgroundResource(R.mipmap.check);
        } else if ("3".equals(questionType)) {
            //判断题
            ivType.setBackgroundResource(R.mipmap.single);
        }
    }

    tvOptionName.setText(mOptionListBeanList.get(j).getOptionName());
    final String optionId = mOptionListBeanList.get(j).getOptionId();
    Boolean check = mOptionListBeanList.get(j).isCheck();
    if (check) {
        if ("1".equals(questionType)) {
            //单选
            ivType.setBackgroundResource(R.mipmap.single_in);
        } else if ("2".equals(questionType)) {
            //多选
            ivType.setBackgroundResource(R.mipmap.check_in);
        } else if ("3".equals(questionType)) {
            //判断题
            ivType.setBackgroundResource(R.mipmap.single_in);
        }
    }

    llRoot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // ToastUtil.ShowToast_short(context,"点击点击");
            //****写个回调来刷新选中效果
            mItfOptionCallBack.chooseOption((Integer) llRoot.getTag(), questionType,
                    position);
        }
    });

    holder.llContaint.addView(choseView);

////////////////////////////////////////

/////Activity页面实现回调数据刷新,以及是否能多选或单选控制

mPaperQueryAdapter.setItfOptionCallBack(new PaperQueryAdapter
                .itfOptionCallBack() {
            @Override
            public void chooseOption(int position, String questionType, int
                    parentposition) {
                // 当前点击的选项
                // ToastUtil.ShowToast_short(mContext,
                // "当前点击的选项:"+position+"----"+parentposition);
                List<PaperQueryRespBean.DatasBean.QuestionBean
                        .OptionSBean> mOptionListBeanList = dataList.get
                        (parentposition).getOptionS();
                PaperQueryRespBean.DatasBean.QuestionBean.OptionSBean
                        optionListBean = mOptionListBeanList.get(position);

                if ("1".equals(questionType)) {
                    //单选
                    for (int j = 0; j < mOptionListBeanList.size(); j++) {
                        if (optionListBean.getOptionId().equals
                                (mOptionListBeanList.get(j).getOptionId())) {
                            if (!optionListBean.isCheck()) {
                                optionListBean.setCheck(!optionListBean.isCheck());
                            }
                        } else {
                            mOptionListBeanList.get(j).setCheck(false);
                        }
                    }

                } else if ("2".equals(questionType)) {
                    //多选
                    optionListBean.setCheck(!optionListBean.isCheck());
                } else if ("3".equals(questionType)) {
                    //判断题
                    for (int j = 0; j < mOptionListBeanList.size(); j++) {
                        if (optionListBean.getOptionId().equals
                                (mOptionListBeanList.get(j).getOptionId())) {
                            if (!optionListBean.isCheck()) {
                                optionListBean.setCheck(!optionListBean.isCheck());
                            }
                        } else {
                            mOptionListBeanList.get(j).setCheck(false);
                        }
                    }
                }
                mPaperQueryAdapter.notifyDataSetChanged();
            }
        });

最后提交数据时,直接拿取数据源的数据进行装载就好了,这里就不贴出来了,然后项目里面还有答题时间控制,直接线程倒计时就行了,如需源码,留言到时候我抽出来发一下。。

猜你喜欢

转载自blog.csdn.net/Nice_Leo/article/details/81705346
今日推荐