Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android listview中从json动态创建视图?_Android_Json_Android View - Fatal编程技术网

如何在android listview中从json动态创建视图?

如何在android listview中从json动态创建视图?,android,json,android-view,Android,Json,Android View,我想从web服务动态创建单选按钮、复选框、微调器。以下是我的回答 { "getSurvey": { "ErrorCode": "0", "Result": "Success", "Response": [ { "SurveyId": "91", "SurveyName": "Sample Survey", "Questio

我想从web服务动态创建单选按钮、复选框、微调器。以下是我的回答

{
    "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)&nbsp;",
                        "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();
}