基于json响应的Android动态布局
我想做一个基于json响应的布局 下面是我的json。现在我想用它做一个布局。在json中,“type_html”是我想要创建的视图类型基于json响应的Android动态布局,android,Android,我想做一个基于json响应的布局 下面是我的json。现在我想用它做一个布局。在json中,“type_html”是我想要创建的视图类型 { "file": { "@attributes": { "id": "form-1", "name": "frm1", "method": "POST", "action": "#" }, "colonne"
{
"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不是有效状态。提前感谢您提出另一个问题。