如何在android listview中从json动态创建视图?
我想从web服务动态创建单选按钮、复选框、微调器。以下是我的回答如何在android listview中从json动态创建视图?,android,json,android-view,Android,Json,Android View,我想从web服务动态创建单选按钮、复选框、微调器。以下是我的回答 { "getSurvey": { "ErrorCode": "0", "Result": "Success", "Response": [ { "SurveyId": "91", "SurveyName": "Sample Survey", "Questio
{
"getSurvey": {
"ErrorCode": "0",
"Result": "Success",
"Response": [
{
"SurveyId": "91",
"SurveyName": "Sample Survey",
"Questions": [
{
"QuestionId": "553",
"QuestionText": "<p style=\"margin: 0px; text-align: left;\">Are you satisfied with Cement Quality?</p>",
"Type": "RadioButtonList",
"Mandatory": "Y",
"OptionValue": [
{
"AnswerId": "2220",
"AnswerValue": "Excellent"
},
{
"AnswerId": "2221",
"AnswerValue": "Good"
},
{
"AnswerId": "2222",
"AnswerValue": "Satisfactory"
},
{
"AnswerId": "2223",
"AnswerValue": "Poor"
}
]
},
{
"QuestionId": "554",
"QuestionText": "How will you rate Cement? (0= Lowest and 7= Highest) ",
"Type": "DropDownList",
"Mandatory": "Y",
"OptionValue": [
{
"AnswerId": "2224",
"AnswerValue": "0"
},
{
"AnswerId": "2225",
"AnswerValue": "1"
},
{
"AnswerId": "2226",
"AnswerValue": "2"
},
{
"AnswerId": "2227",
"AnswerValue": "3"
},
{
"AnswerId": "2228",
"AnswerValue": "4"
},
{
"AnswerId": "2229",
"AnswerValue": "5"
},
{
"AnswerId": "2230",
"AnswerValue": "6"
},
{
"AnswerId": "2231",
"AnswerValue": "7"
}
]
},
{
"QuestionId": "555",
"QuestionText": "What Kind of issues you face while Delivery?",
"Type": "ListBox",
"Mandatory": "Y",
"OptionValue": [
{
"AnswerId": "2232",
"AnswerValue": "Logistic Issue"
},
{
"AnswerId": "2233",
"AnswerValue": "Material Handeling "
},
{
"AnswerId": "2234",
"AnswerValue": "Stock not available"
},
{
"AnswerId": "2235",
"AnswerValue": "Wastage of Cement"
},
{
"AnswerId": "2236",
"AnswerValue": "Others"
}
]
},
{
"QuestionId": "559",
"QuestionText": "Do you like Cement?",
"Type": "CheckBoxList",
"Mandatory": "Y",
"OptionValue": [
{
"AnswerId": "2237",
"AnswerValue": "Yes"
},
{
"AnswerId": "2238",
"AnswerValue": "No"
}
]
}
]
}
]
}
}
{
“getSurvey”:{
“错误代码”:“0”,
“结果”:“成功”,
“答复”:[
{
“调查ID”:“91”,
“调查名称”:“抽样调查”,
“问题”:[
{
“问题ID”:“553”,
“问题文本”:“您对水泥质量满意吗?
”,
“类型”:“RadioButtonList”,
“强制性”:“Y”,
“期权价值”:[
{
“回答”:“2220”,
“回答价值”:“优秀”
},
{
“回答”:“2221”,
“回答价值”:“好”
},
{
“回答”:“2222”,
“回答价值”:“满意”
},
{
“回答”:“2223”,
“回答值”:“差”
}
]
},
{
“问题ID”:“554”,
“问题文本”:“你如何评价水泥?(0表示最低,7表示最高)”,
“类型”:“DropDownList”,
“强制性”:“Y”,
“期权价值”:[
{
“回答”:“2224”,
“应答值”:“0”
},
{
“回答”:“2225”,
“应答值”:“1”
},
{
“回答”:“2226”,
“应答值”:“2”
},
{
“回答”:“2227”,
“应答值”:“3”
},
{
“回答”:“2228”,
“应答值”:“4”
},
{
“回答”:“2229”,
“应答值”:“5”
},
{
“应答人”:“2230”,
“应答值”:“6”
},
{
“应答者”:“2231”,
“应答值”:“7”
}
]
},
{
“问题ID”:“555”,
“问题文本”:“您在交付时面临什么样的问题?”,
“类型”:“列表框”,
“强制性”:“Y”,
“期权价值”:[
{
“应答者”:“2232”,
“应答值”:“逻辑问题”
},
{
“应答者”:“2233”,
“回答价值”:“材料处理”
},
{
“应答者”:“2234”,
“AnswerValue”:“库存不可用”
},
{
“应答者”:“2235”,
“应答值”:“水泥损耗”
},
{
“应答者”:“2236”,
“回答价值”:“其他”
}
]
},
{
“问题ID”:“559”,
“问题文本”:“你喜欢水泥吗?”,
“类型”:“复选框列表”,
“强制性”:“Y”,
“期权价值”:[
{
“应答者”:“2237”,
“回答值”:“是”
},
{
“应答者”:“2238”,
“应答值”:“否”
}
]
}
]
}
]
}
}
根据类型,我需要动态创建视图。请有人给我的想法或解决方案如何实现这一点。动态创建视图后,我需要从创建的视图中获取所有选定的值
谢谢 这很棘手,您需要先学习如何在代码中动态创建布局。我将从下面的复习教程开始:
您需要创建一个类来解析这些数据,并专门为您的值创建视图。完成后,您可以再次读取数据或将其存储,以便将数据加载到屏幕上。这也可以在创建布局的同时完成。如果事先知道问题类型,如
'“type”:“RadioButtonList”
,则可以创建针对这些类型的预定义布局。然后需要在json中解析和查找对象/响应/问题/类型,并扩展适当的布局。你也需要
ScrollView sv = new ScrollView(this);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
//radio list
RadioGroup group = new RadioGroup(this);
group.setOrientation(RadioGroup.VERTICAL);
RadioButton btn1 = new RadioButton(this);
btn1.setText("BTN1");
group.addView(btn1);
RadioButton btn2 = new RadioButton(this);
btn2.setText("BTN2");
group.addView(btn2);
ll.addView(group);
//drop down
Spinner spiner = new Spinner(this);
List<String> data = new ArrayList<String>();
data.add("Spinner - one");
data.add("Spinner - two");
data.add("Spinner - three");
data.add("Spinner - four");
data.add("Spinner - five");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
spiner.setAdapter(adapter);
ll.addView(spiner);
//listview
ListView listData = new ListView(this);
List<String> dataList = new ArrayList<String>();
dataList.add("List - one");
dataList.add("List - two");
dataList.add("List - three");
dataList.add("List - four");
dataList.add("List - five");
dataList.add("List - six");
dataList.add("List - seven");
dataList.add("List - eight");
dataList.add("List - nine");
dataList.add("List - ten");
dataList.add("List - eleven");
dataList.add("List - twelve");
dataList.add("List - thirteen");
dataList.add("List - fourteen");
dataList.add("List - fifteen");
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, dataList);
listData.setAdapter(listAdapter);
ll.addView(listData);
this.setContentView(sv);
setListViewHeightBasedOnChildren(listData);
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}