基于json响应的Android动态布局

基于json响应的Android动态布局,android,Android,我想做一个基于json响应的布局 下面是我的json。现在我想用它做一个布局。在json中,“type_html”是我想要创建的视图类型 { "file": { "@attributes": { "id": "form-1", "name": "frm1", "method": "POST", "action": "#" }, "colonne"

我想做一个基于json响应的布局

下面是我的json。现在我想用它做一个布局。在json中,“type_html”是我想要创建的视图类型

{
    "file": {
        "@attributes": {
            "id": "form-1",
            "name": "frm1",
            "method": "POST",
            "action": "#"
        },
        "colonne": {
            "@attributes": {
                "id": "f_col_1",
                "width": "700px",
                "height": "178px"
            },
            "element": [
                {
                    "@attributes": {
                        "type_html": "radio",
                        "idco": "1",
                        "idli": "1",
                        "label": "Result",
                        "id": "nb_0",
                        "name": "st",
                        "val_liste": "a=Is Doctor satisfied; b=Is Doctor not satisfied;",
                        "val_defaut": ""
                    }
                },
                {
                    "@attributes": {
                        "type_html": "checkbox",
                        "idco": "1",
                        "idli": "2",
                        "label": "abc",
                        "id": "nb_1",
                        "name": "ch",
                        "val_liste": "a= Is doctor taking interest;",
                        "val_defaut": ""
                    }
                },
                {
                    "@attributes": {
                        "type_html": "radio",
                        "idco": "1",
                        "idli": "3",
                        "label": "Gender",
                        "id": "nb_2",
                        "name": "rb",
                        "val_liste": "a=Male;b=Female;",
                        "val_defaut": ""
                    }
                },
                {
                    "@attributes": {
                        "type_html": "radio",
                        "idco": "1",
                        "idli": "4",
                        "label": "Are you handicaped ?",
                        "id": "nb_3",
                        "name": "nb_3",
                        "val_liste": "a=Yes;b=No;",
                        "val_defaut": ""
                    }
                }
            ]
        }
    }
}
这是我的代码,我累了

for(int i=0;i<jsonArray.length();i++){

            JSONObject jObject=jsonArray.getJSONObject(i);

            JSONObject attribute=jObject.getJSONObject("@attributes");

            Log.d("in for",jObject.toString());

            String htmltype=attribute.getString("type_html");
            String Value=attribute.getString("val_liste");
            String labString=attribute.getString("label");

            DynamicTodo dynamicTodo=new DynamicTodo(htmltype, Value, labString);

            arrayList.add(dynamicTodo);

            Log.d("For html",htmltype);


            viewto.add(htmltype);
            valueto.add(Value);
        }

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;

    }

    @SuppressWarnings("unchecked")
    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

              //Log.d("Valee",valueto.get(0));


    for(int i=0;i<arrayList.size();i++){

        LinearLayout myLayout = null;
        if((arrayList.get(i).getTypeHtml()).equals("radio")){


            Log.d("Arrra","aaaaaaa");
            String Valliste=arrayList.get(i).getValue();
            String Lable=arrayList.get(i).getLable();


            RadioGroup group=new RadioGroup(DynamicFeedback.this);
             RadioButton Radiobutton=new RadioButton(DynamicFeedback.this);


              Radiobutton.setText(Lable);
              group.addView(Radiobutton);

             myLayout = new LinearLayout(DynamicFeedback.this);
                  myLayout.setBackgroundColor(Color.WHITE);
                  myLayout.setOrientation(LinearLayout.VERTICAL);

                  LinearLayout.LayoutParams radioParams= new LinearLayout.LayoutParams(
                          LinearLayout.LayoutParams.WRAP_CONTENT, 
                          LinearLayout.LayoutParams.WRAP_CONTENT);
                  myLayout.addView(group,radioParams);

        }
        if((arrayList.get(i).getTypeHtml()).equals("radio")){
            setContentView(myLayout);
        }

    }
    }


    }

用于(int i=0;ii看起来像是在for循环中创建myLayout,然后向其中添加视图。因此,每次都创建一个新的布局,而上一个布局会丢失。您需要在循环开始之前创建布局,在其中一次添加一个视图,然后在循环完成后调用setContentView是。否则,您将只看到您添加的最后一个。

按照给定的示例操作

您将获得解析JSON对象和访问属性的概念和简单理解。

您可以检查它是否满足您的用例。您可以创建视图,用JSON本身定义布局

布局示例:

{
  "type": "LinearLayout",
  "orientation": "vertical",
  "padding": "16dp",
  "children": [{
    "type": "TextView",
    "layout_width": "200dp",
    "gravity": "center",
    "text": "~{{user.profile.name}} ({{user.profile.experience}}$(number))"
  }, {
    "type": "HorizontalProgressBar",
    "layout_width": "200dp",
    "layout_marginTop": "8dp",
    "max": 6000,
    "progress": "$user.profile.experience"
  }]
}

请格式化您的json并将其标记为代码,目前还无法阅读。很快我们将对其进行处理,兄弟……但现在我不知道您可以检查它是否满足您的用例。您可以通过定义json本身的布局来动态地从数据创建视图。我也将把它作为一个答案。谢谢先生,但我不想知道如何解析json但如何基于该json进行布局您对使用proteus的复选框选择器有何想法?请提前感谢。您可以直接引用一个选择器,如
“background”:“@drawable/selector\u checkbox
,也可以在运行时创建一个选择器。
“background”:{……选择器属性…}
。我敦促您发布另一个问题,因为在评论中回答这个问题非常困难。谢谢,如果我使用“按钮”:“@drawable/checkbox\u selector”,它工作正常,但是如果我使用“按钮”:{“type”:“selector”,“children”:[{“drawable”:“@drawable/check”,“state\u checked”:true},{“drawable”:“@drawable/uncheck”,“state_checked”:false}]}正在获取java.lang.IllegalArgumentException:drawable不是有效状态。提前感谢您提出另一个问题。