非常久没写东西了。今天来总结下有关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 实现调查问卷-单选-多选相关推荐

  1. android开发 问卷调查案例_Android开发Handler的简单使用——随机点名案例

    前言 我们知道,Android的UI线程也叫主线程,工作线程(子线程)主要是负责执行耗时操作的线程,如果我们在子线程处理完事物后,需要通知UI线程更新界面.那么,子线程如何通知UI更新呢,这个就是通过 ...

  2. android 实现调查问卷-单选-多选

    转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229 先上效果图 个人分析,最好是用动态布局加载来实现,好了,说思路,将这整体 ...

  3. android开发 问卷调查案例_安卓 问卷调查Demo 原生代码

    [实例简介] android 问卷调查Demo,android原生代码,不是webView加载H5,比较容易理解,大家可以改改 [实例截图] [核心代码] QuestionDemo └── Quest ...

  4. android开发 问卷调查案例_「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、EditView、单选、多选、输入、...

    Android问卷调查类型页面及逻辑实现,RadioButton,CheckBox,EditView,RadioButton+EditView单选.多选.输入.单选加输入四种状态四种类型 问题简述:A ...

  5. Android开发精典案例60个

    [实例简介] Android开发精典案例60个 文件:url80.ctfile.com/f/25127180-740794786-4b13cf?p=551685 (访问密码: 551685) [核心代 ...

  6. 开发 问卷调查案例_云南泸沽湖摩梭文化原真性保持与旅游开发协调研究

    体验视角下云南泸沽湖摩梭文化原真性保持与旅游开发协调研究 彭莹 重庆师范大学 摘要:民俗旅游是一种高层次的文化旅游,以其显著的地域差异.浓厚的历史氛围.鲜明的民俗品格.独特的文化内涵以及丰富多彩的表现 ...

  7. 单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷

    锅大虾:第一篇:DJANGO开发产品选择表&调查问卷​zhuanlan.zhihu.com 三.调查问卷部分 前端实现效果:首页 首页效果图 需求: 1.单项.多项选择,并且随意增加" ...

  8. Android:设计一个简单的调查问卷

    设计一个简单的调查问卷,要求用到TextView,Button,CheckBox,RadioButton,EditText等控件 今天写了一个demo,里面用到了常用的布局,以及常用的几种控件,这里调 ...

  9. android 开发工具历程_Android app应用软件开发的艰辛历程

    [摘要]对于从一个零基础学习android开发的技术人员来说,能够对android app源码有点了解已经是不错的了,在android app 市场里,大多android app都是新手技术开发者的初 ...

  10. php调查问卷单选框标题,word调查问卷制作:怎样设置复选框各单选框

    在信息自动化的时代下,为了向用户了解和采集一些基本信息,经常会使用电子调查问卷收集所需数据,采用这种形式无疑比以往的纸质调查问卷更为快捷方便. 而在电子调查问卷中,让我们最为熟悉的就是针对各种问题设定 ...

最新文章

  1. On Perseverance
  2. go语言中的闭包结构
  3. 网易超分黑科技来了!全新移动端视频体验时代来临
  4. modelform save
  5. 【css】适配iphoneX
  6. 测试面试题集-2.测试用例设计
  7. 使用adb shell screencap命令截图
  8. 电商设计素材:15000款淘宝促销水印元素模版,手慢的人领不到!...
  9. 微信第三方开放平台代公众号实现业务
  10. WIN10如果将电脑网络分享给iphone
  11. win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
  12. Collections中Counter函数,namedtuple函数,defaultdict函数的使用
  13. android车载系统测试,一种车载Android多媒体主机的自动测试方法和系统与流程
  14. 【渝粤教育】广东开放大学 广东开放大学学习指引 形成性考核 (28)
  15. 基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告
  16. USB PD v1.0快速充电通信原理
  17. 公开在线视频流(rtsp、stmp)
  18. LeetCode——69 x的平方根
  19. JVM的基本结构及其各部分详解(一)
  20. 治疗幽门螺杆菌感染中存在的问题

热门文章

  1. selenium打开网址
  2. java 实现饼状图_怎么用JAVA 开发的圆饼图
  3. php js轮播图片代码,html中用JS实现图片轮播的实例代码
  4. SSM框架:MyBatis
  5. 适用于Android的最佳笔记应用程序以及如何制作自己的应用程序
  6. JavaScript实现随机抽奖功能
  7. 如何在idea中设置Tomcat热部署
  8. matlab幂级数展开的收敛区间,常见函数的幂级数展开式收敛区间的快速确定法.pdf...
  9. 激光雷达点云数据处理
  10. 电信中兴f452光猫路由改桥接最简单的方式,亲自体验成功。