我得到一个json响应,其中我得到jsonObject和jsonArray。我成功地为jsonObject设置了值,但对于JsonArray,我有两个值作为que ans ans。例如:
"question": [
{
"ans": "test",
"que": "What is your name"
},
{
"ans": "25-30",
"que": "Age"
}
]
这是jsonObject中的jsonarray。现在我想在文本框中设置que和ans。请注意,问题的数量不是固定的,它们可以是12或更多,取决于API。
我的问题是如何在布局inflater或类似的东西中设置这个问题? 提前谢谢:)
答案 0 :(得分:0)
请尝试这种方式,希望这有助于您解决问题。
<强> activity_main.xml中强>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/lnrQuestionContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
<强> question.xml 强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtQuestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txtAnswer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"/>
</LinearLayout>
<强> MainActivity.java 强>
public class MainActivity extends ActionBarActivity {
private LinearLayout lnrQuestionContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lnrQuestionContainer =(LinearLayout) findViewById(R.id.lnrQuestionContainer);
try{
JSONObject jsonObject = new JSONObject("{\"question\":[{\"ans\":\"test\",\"que\":\"What is your name\"},{\"ans\":\"25-30\",\"que\":\"Age\"}]}");
JSONArray questionJsonArray = jsonObject.getJSONArray("question");
for(int i=0;i<questionJsonArray.length();i++){
View view = LayoutInflater.from(this).inflate(R.layout.question,null);
TextView txtQuestion = (TextView) view.findViewById(R.id.txtQuestion);
TextView txtAnswer = (TextView) view.findViewById(R.id.txtAnswer);
txtQuestion.setText("Question "+(i+1)+" : "+questionJsonArray.getJSONObject(i).getString("que"));
txtAnswer.setText("Answer "+(i+1)+" : "+questionJsonArray.getJSONObject(i).getString("ans"));
lnrQuestionContainer.addView(view);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
你需要像这样使用膨胀:保留一个item.xml,它将容纳2个TextViews(或根据你的需要使用EditText。)
item.xml:
<RelativeLayout
android:id="@+id/item_row"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/que"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/ans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
</RelativeLayout>
现在在你的代码中:
您需要在循环中为您的JSONArray中的所有项目充气。所以首先解析JSONArray并得到一个问题,答案对的ArrayList:
ArrayList<String[]> myArr = new ArrayList<String[]>();
for (int i=0; i < myJSONArray.length(); i++) {
JSONObject j = myJSONArray.getJSONObject(i);
String[] t = {j.getString("que"),j.getString("ans")};
myArr.add[t];
}
将此传递给您的活动。
现在您需要遍历ArrayList并使布局膨胀,使用map中的值填充TextViews,并在父布局中添加膨胀的视图:
RelativeLayout container = (RelativeLayout)findViewById(R.id.mylayout); //this will be your container layout
for (int i = 0; i < secQAArr.size(); i++){
View item = getLayoutInflater().inflate(R.layout.item, null);
TextView tQue = (TextView) findViewById(R.id.que);
que.seText(secQAArr.get(i)[0]);
TextView tAns = (TextView) findViewById(R.id.ans);
que.seText(secQAArr.get(i)[1]);
container.addView(item);
}
希望它有所帮助。