实现效果图
实现思路: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();
}
});
最后提交数据时,直接拿取数据源的数据进行装载就好了,这里就不贴出来了,然后项目里面还有答题时间控制,直接线程倒计时就行了,如需源码,留言到时候我抽出来发一下。。