android开发 问卷调查案例_android 实现调查问卷-单选-多选
非常久没写东西了。今天来总结下有关android调查问卷的需求实现。
转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229
先上效果图
个人分析,最好是用动态布局载入来实现,好了。说思路。将这总体分为3块
最外面这个布局里面。依据第二层问题的数量来动态生成布局,增加在第一层布局里面,
然后再依据问题下答案的数量来动态生成布局。增加第二层布局里面,思路这么透彻,想想还有些小激动呢。
先建造三个实体类
public class Page {
//问卷id
private String pageId;
//问卷状态
private String status;
//问卷主题
private String title;
//题目
private ArrayList quesitions;
public ArrayList getQuesitions() {
return quesitions;
}
public void setQuesitions(ArrayList quesitions) {
this.quesitions = quesitions;
}
public String getPageId() {
return pageId;
}
public void setPageId(String pageId) {
this.pageId = pageId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}public class Quesition {
//题目id
private String quesitionId;
//单选多选标识
private String type;
//题目
private String content;
//选项
private ArrayList answers;
//是否解答
private int que_state;
public int getQue_state() {
return que_state;
}
public void setQue_state(int que_state) {
this.que_state = que_state;
}
public String getQuesitionId() {
return quesitionId;
}
public void setQuesitionId(String quesitionId) {
this.quesitionId = quesitionId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public ArrayList getAnswers() {
return answers;
}
public void setAnswers(ArrayList answers) {
this.answers = answers;
}
}public class Answer {
//答案id
private String answerId;
//答案主体
private String answer_content;
//答案是否被解答
private int ans_state;
public int getAns_state() {
return ans_state;
}
public void setAns_state(int ans_state) {
this.ans_state = ans_state;
}
public String getAnswerId() {
return answerId;
}
public void setAnswerId(String answerId) {
this.answerId = answerId;
}
public String getAnswer_content() {
return answer_content;
}
public void setAnswer_content(String answer_content) {
this.answer_content = answer_content;
}
}建造这三个实体类的目的是为了在做demo的时候直接通过假数据来尽可能的贴近项目。使demo完毕后能尽快的移植进项目。
以下来看看布局,总工用到了3个布局。
首先是activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e6e4e3" >
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#EA5514"
android:orientation="horizontal" >
android:id="@+id/test_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="5dp"
android:padding="5dp"
android:background="@drawable/ic_back_white"
/>
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="调查问卷"
android:textSize="18sp"
android:textColor="@android:color/white"
android:layout_gravity="center"
android:gravity="center"/>
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="10sp"
android:layout_marginTop="40dp"
android:layout_marginLeft="30dp"
android:textColor="#898989"
/>
android:id="@+id/lly_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginBottom="30dp"
android:text="提交"
android:textSize="20sp"
android:textColor="@android:color/white"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/button_submit"/>
id为lly_test的布局就是终于要增加的目的布局
然后是quesition_layout.xml
>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="35dp"
>
android:id="@+id/txt_question_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="#3e3a39"
android:layout_marginLeft="45dp"
/>
android:id="@+id/lly_answer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="10dp"
android:background="@drawable/shape_dialog_radius_all"
>
//然后是answer_layout.xml
xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="vertical"
>
android:id="@+id/lly_answer_size"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"/>
android:id="@+id/txt_answer_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="#595757"
android:layout_gravity="center_vertical"
/>
android:id="@+id/vw_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#9EA0A0"
>
然后是主要代码。长久不写博客,有点生疏了,大家顺着思路来看,凝视也差点儿相同详尽,假设有不明确的再讨论
public class MainActivity extends Activity {
private LinearLayout test_layout;
private Page the_page;
//答案列表
private ArrayList the_answer_list;
//问题列表
private ArrayList the_quesition_list;
//问题所在的View
private View que_view;
//答案所在的View
private View ans_view;
private LayoutInflater xInflater;
private Page page;
//以下这两个list是为了实现点击的时候改变图片。由于单选多选时情况不一样。为了方便控制
//存每一个问题下的imageview
private ArrayList> imglist=new ArrayList>();
//存每一个答案的imageview
private ArrayList imglist2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//假数据
initDate();
//提交按钮
Button button=(Button)findViewById(R.id.submit);
button.setOnClickListener(new submitOnClickListener(page));
}
private void initDate() {
//假数据
// TODO Auto-generated method stub
Answer a_one=new Answer();
a_one.setAnswerId("0");
a_one.setAnswer_content("男");
a_one.setAns_state(0);
Answer a_two=new Answer();
a_two.setAnswerId("1");
a_two.setAnswer_content("女");
a_two.setAns_state(0);
Answer a_three=new Answer();
a_three.setAnswerId("3");
a_three.setAnswer_content("是");
a_three.setAns_state(0);
Answer a_four=new Answer();
a_four.setAnswerId("4");
a_four.setAnswer_content("不是");
a_four.setAns_state(0);
Answer a_three1=new Answer();
a_three1.setAnswerId("3");
a_three1.setAnswer_content("是");
a_three1.setAns_state(0);
Answer a_four1=new Answer();
a_four1.setAnswerId("4");
a_four1.setAnswer_content("不是");
a_four1.setAns_state(0);
ArrayList answers_one=new ArrayList();
answers_one.add(a_one);
answers_one.add(a_two);
ArrayList answers_two=new ArrayList();
answers_two.add(a_one);
answers_two.add(a_two);
answers_two.add(a_three);
answers_two.add(a_four);
ArrayList answers_three=new ArrayList();
answers_three.add(a_one);
answers_three.add(a_two);
answers_three.add(a_three);
answers_three.add(a_four);
answers_three.add(a_three1);
answers_three.add(a_four1);
Quesition q_one=new Quesition();
q_one.setQuesitionId("00");
q_one.setType("0");
q_one.setContent("1、您的性别:");
q_one.setAnswers(answers_one);
q_one.setQue_state(0);
Quesition q_two=new Quesition();
q_two.setQuesitionId("01");
q_two.setType("1");
q_two.setContent("2、您是党员吗?");
q_two.setAnswers(answers_two);
q_two.setQue_state(0);
Quesition q_three=new Quesition();
q_three.setQuesitionId("03");
q_three.setType("1");
q_three.setContent("3、您是dsfsdfsd吗?");
q_three.setAnswers(answers_three);
q_three.setQue_state(0);
ArrayList quesitions=new ArrayList();
quesitions.add(q_one);
quesitions.add(q_two);
quesitions.add(q_three);
page=new Page();
page.setPageId("000");
page.setStatus("0");
page.setTitle("第一次调查问卷");
page.setQuesitions(quesitions);
//载入布局
initView(page);
}
private void initView(Page page) {
// TODO Auto-generated method stub
//这是要把问题的动态布局增加的布局
test_layout=(LinearLayout)findViewById(R.id.lly_test);
TextView page_txt=(TextView)findViewById(R.id.txt_title);
page_txt.setText(page.getTitle());
//获得问题即第二层的数据
the_quesition_list=page.getQuesitions();
//依据第二层问题的多少,来动态载入布局
for(int i=0;i
que_view=xInflater.inflate(R.layout.quesition_layout, null);
TextView txt_que=(TextView)que_view.findViewById(R.id.txt_question_item);
//这是第三层布局要增加的地方
LinearLayout add_layout=(LinearLayout)que_view.findViewById(R.id.lly_answer);
//推断单选-多选来实现后面是*号还是*多选,
if(the_quesition_list.get(i).getType().equals("1")){
set(txt_que,the_quesition_list.get(i).getContent(),1);
}else{
set(txt_que,the_quesition_list.get(i).getContent(),0);
}
//获得答案即第三层数据
the_answer_list=the_quesition_list.get(i).getAnswers();
imglist2=new ArrayList();
for(int j=0;j
ans_view=xInflater.inflate(R.layout.answer_layout, null);
TextView txt_ans=(TextView)ans_view.findViewById(R.id.txt_answer_item);
ImageView image=(ImageView)ans_view.findViewById(R.id.image);
View line_view=ans_view.findViewById(R.id.vw_line);
if(j==the_answer_list.size()-1){
//最后一条答案以下不要线是指布局的问题
line_view.setVisibility(View.GONE);
}
//推断单选多选载入不同选项图片
if(the_quesition_list.get(i).getType().equals("1")){
image.setBackgroundDrawable(getResources().getDrawable(R.drawable.multiselect_false));
}else{
image.setBackgroundDrawable(getResources().getDrawable(R.drawable.radio_false));
}
Log.e("---", "------"+image);
imglist2.add(image);
txt_ans.setText(the_answer_list.get(j).getAnswer_content());
LinearLayout lly_answer_size=(LinearLayout)ans_view.findViewById(R.id.lly_answer_size);
lly_answer_size.setOnClickListener(new answerItemOnClickListener(i,j,the_answer_list,txt_ans));
add_layout.addView(ans_view);
}
/*for(int r=0; r
Log.e("---", "imglist2--------"+imglist2.get(r));
}*/
imglist.add(imglist2);
test_layout.addView(que_view);
}
/*for(int q=0;q
for(int w=0;w
Log.e("---", "共同拥有------"+imglist.get(q).get(w));
}
}*/
}
private void set(TextView tv_test, String content,int type) {
//为了载入问题后面的* 和*多选
// TODO Auto-generated method stub
String w;
if(type==1){
w = content+"*[多选题]";
}else{
w = content+"*";
}
int start = content.length();
int end = w.length();
Spannable word = new SpannableString(w);
word.setSpan(new AbsoluteSizeSpan(25), start, end,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
word.setSpan(new StyleSpan(Typeface.BOLD), start, end,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
word.setSpan(new ForegroundColorSpan(Color.RED), start, end,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
tv_test.setText(word);
}
class answerItemOnClickListener implements OnClickListener{
private int i;
private int j;
private TextView txt;
private ArrayList the_answer_lists;
public answerItemOnClickListener(int i,int j, ArrayList the_answer_list,TextView text){
this.i=i;
this.j=j;
this.the_answer_lists=the_answer_list;
this.txt=text;
}
//实现点击选项后改变选中状态以及相应图片
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//推断当前问题是单选还是多选
/*Log.e("------", "选择了-----第"+i+"题");
for(int q=0;q
for(int w=0;w
//Log.e("---", "共同拥有------"+imglist.get(q).get(w));
}
}
Log.e("----", "点击了---"+imglist.get(i).get(j));*/
if(the_quesition_list.get(i).getType().equals("1")){
//多选
if(the_answer_lists.get(j).getAns_state()==0){
//假设未被选中
txt.setTextColor(Color.parseColor("#EA5514"));
imglist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.multiselect_true));
the_answer_lists.get(j).setAns_state(1);
the_quesition_list.get(i).setQue_state(1);
}else{
txt.setTextColor(Color.parseColor("#595757"));
imglist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.multiselect_false));
the_answer_lists.get(j).setAns_state(0);
the_quesition_list.get(i).setQue_state(1);
}
}else{
//单选
for(int z=0;z
the_answer_lists.get(z).setAns_state(0);
imglist.get(i).get(z).setBackgroundDrawable(getResources().getDrawable(R.drawable.radio_false));
}
if(the_answer_lists.get(j).getAns_state()==0){
//假设当前未被选中
imglist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.radio_true));
the_answer_lists.get(j).setAns_state(1);
the_quesition_list.get(i).setQue_state(1);
}else{
//假设当前已被选中
the_answer_lists.get(j).setAns_state(1);
the_quesition_list.get(i).setQue_state(1);
}
}
//推断当前选项是否选中
}
}
class submitOnClickListener implements OnClickListener{
private Page page;
public submitOnClickListener(Page page){
this.page=page;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//推断是否答完题
boolean isState=true;
//终于要的json数组
JSONArray jsonArray = new JSONArray();
//点击提交的时候,先推断状态,假设有未答完的就提示。假设没有再把每条答案提交(包括问卷ID 问题ID 及答案ID)
//注:不用管是否是一个问题的答案,就以答案的个数为准来提交上述格式的数据
for(int i=0;i
the_answer_list=the_quesition_list.get(i).getAnswers();
//推断是否有题没答完
if(the_quesition_list.get(i).getQue_state()==0){
Toast.makeText(getApplicationContext(), "您第"+(i+1)+"题没有答完", Toast.LENGTH_LONG).show();
jsonArray=null;
isState=false;
break;
}else{
for(int j=0;j
if(the_answer_list.get(j).getAns_state()==1){
JSONObject json = new JSONObject();
try {
json.put("psychologicalId", page.getPageId());
json.put("questionId", the_quesition_list.get(i).getQuesitionId());
json.put("optionId", the_answer_list.get(j).getAnswerId());
jsonArray.put(json);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
if(isState){
if(jsonArray.length()>0){
Log.e("af", jsonArray.toString());
for(int item=0;item
JSONObject job;
try {
job = jsonArray.getJSONObject(item);
Log.e("----", "pageId--------"+job.get("pageId"));
Log.e("----", "quesitionId--------"+job.get("quesitionId"));
Log.e("----", "answerId--------"+job.get("answerId"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 遍历 jsonarray 数组。把每一个对象转成 json 对象
}
}
}
}
}
}
人不能懒惰啊,以后要多多总结。欢迎大家讨论。
android开发 问卷调查案例_android 实现调查问卷-单选-多选相关推荐
- android开发 问卷调查案例_Android开发Handler的简单使用——随机点名案例
前言 我们知道,Android的UI线程也叫主线程,工作线程(子线程)主要是负责执行耗时操作的线程,如果我们在子线程处理完事物后,需要通知UI线程更新界面.那么,子线程如何通知UI更新呢,这个就是通过 ...
- android 实现调查问卷-单选-多选
转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229 先上效果图 个人分析,最好是用动态布局加载来实现,好了,说思路,将这整体 ...
- android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
[实例简介] android 问卷调查Demo,android原生代码,不是webView加载H5,比较容易理解,大家可以改改 [实例截图] [核心代码] QuestionDemo └── Quest ...
- android开发 问卷调查案例_「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、EditView、单选、多选、输入、...
Android问卷调查类型页面及逻辑实现,RadioButton,CheckBox,EditView,RadioButton+EditView单选.多选.输入.单选加输入四种状态四种类型 问题简述:A ...
- Android开发精典案例60个
[实例简介] Android开发精典案例60个 文件:url80.ctfile.com/f/25127180-740794786-4b13cf?p=551685 (访问密码: 551685) [核心代 ...
- 开发 问卷调查案例_云南泸沽湖摩梭文化原真性保持与旅游开发协调研究
体验视角下云南泸沽湖摩梭文化原真性保持与旅游开发协调研究 彭莹 重庆师范大学 摘要:民俗旅游是一种高层次的文化旅游,以其显著的地域差异.浓厚的历史氛围.鲜明的民俗品格.独特的文化内涵以及丰富多彩的表现 ...
- 单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷
锅大虾:第一篇:DJANGO开发产品选择表&调查问卷zhuanlan.zhihu.com 三.调查问卷部分 前端实现效果:首页 首页效果图 需求: 1.单项.多项选择,并且随意增加" ...
- Android:设计一个简单的调查问卷
设计一个简单的调查问卷,要求用到TextView,Button,CheckBox,RadioButton,EditText等控件 今天写了一个demo,里面用到了常用的布局,以及常用的几种控件,这里调 ...
- android 开发工具历程_Android app应用软件开发的艰辛历程
[摘要]对于从一个零基础学习android开发的技术人员来说,能够对android app源码有点了解已经是不错的了,在android app 市场里,大多android app都是新手技术开发者的初 ...
- php调查问卷单选框标题,word调查问卷制作:怎样设置复选框各单选框
在信息自动化的时代下,为了向用户了解和采集一些基本信息,经常会使用电子调查问卷收集所需数据,采用这种形式无疑比以往的纸质调查问卷更为快捷方便. 而在电子调查问卷中,让我们最为熟悉的就是针对各种问题设定 ...
最新文章
- On Perseverance
- go语言中的闭包结构
- 网易超分黑科技来了!全新移动端视频体验时代来临
- modelform save
- 【css】适配iphoneX
- 测试面试题集-2.测试用例设计
- 使用adb shell screencap命令截图
- 电商设计素材:15000款淘宝促销水印元素模版,手慢的人领不到!...
- 微信第三方开放平台代公众号实现业务
- WIN10如果将电脑网络分享给iphone
- win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
- Collections中Counter函数,namedtuple函数,defaultdict函数的使用
- android车载系统测试,一种车载Android多媒体主机的自动测试方法和系统与流程
- 【渝粤教育】广东开放大学 广东开放大学学习指引 形成性考核 (28)
- 基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告
- USB PD v1.0快速充电通信原理
- 公开在线视频流(rtsp、stmp)
- LeetCode——69 x的平方根
- JVM的基本结构及其各部分详解(一)
- 治疗幽门螺杆菌感染中存在的问题