2016-10-13 6 views
0
JSONArray jsonQuestion = new JSONArray(obj.get("question").toString()); 
for (int iii = 0; iii < jsonQuestion.length(); iii++) { 
    LinearLayout lll = new LinearLayout(Questionnaire.this); 
    lll.setOrientation(LinearLayout.VERTICAL); 


    JSONObject obj2 = (JSONObject) jsonQuestion.get(iii); 
    System.out.println(obj2.get("question")); 

    TextView tv = new TextView(Questionnaire.this); 

    tv.setText(obj2.get("question").toString()); 
    lll.addView(tv); 




    JSONArray jsonAnswer = new JSONArray(obj.get("answer").toString()); 
    Log.d("Reading Answer: ", jsonAnswer + ""); 

    for (int iiii = 0; iiii < jsonAnswer.length(); iiii++) { 
     JSONObject obj3 = (JSONObject) jsonAnswer.get(iiii); 
     System.out.println(obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())); 
     if (obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())) { 
      TextView tv1 = new TextView(Questionnaire.this); 
      tv1.setText(obj3.get("inputname").toString()); 


      RadioGroup group = new RadioGroup(Questionnaire.this); 
      group.setOrientation(RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTAL or RadioGroup.VERTICAL 

      if (obj3.get("inputtype").toString().matches("radio")) { 

       RadioButton newRadioButton = new RadioButton(Questionnaire.this); 
       newRadioButton.setId(Integer.parseInt(obj3.get("answerid").toString())); 
       newRadioButton.setText(obj3.get("inputname").toString()); 
       group.addView(newRadioButton); 


       lll.addView(group); 

      } 







     } 

    } 
    ll.addView(lll); 

} 

これはラジオボタンを動的に追加するためのコードです。ラジオグループが動作していない、垂直方向のアライメント

問題は、1つのオプションを選択し、それ以外のものを選択すると前のものを選択解除しないという問題です。 同じ無線グループに両方が追加されている場合に、別の番号を選択した最初の番号の選択を解除しないのはなぜですか?の向きが、私は

RadioGroup group = new RadioGroup(Questionnaire.this); 
group.setOrientation(RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTAL or RadioGroup.VERTICAL 

の私の宣言を移動し、水平

UPDATE

に設定されている場合、また、それはお互いの隣にあるが、互いの上にラジオボタンを配置していませんループの親側のループを取得しています

java.lang.IllegalStateException:子供はすでに親を持っています。子の親で最初にremoveView()を呼び出す必要があります。

どうすればいいですか?

+1

"...両方が同じラジオグループに追加されている場合。" - 彼らは皆同じ​​ラジオグループにいると確信していますか?新しい 'RadioButton'ごとに新しい' RadioGroup'を作成しているようです。これはおそらくあなたの方向の問題を説明します。 –

+0

@MikeM。私はforループを持っているので、あなたが今言ったことのために私はそれを外に移動しました。java.lang.IllegalStateExceptionを取得しています:指定された子はすでに親を持っています。最初に子の親に対してremoveView()を呼び出さなければなりません。どうすればいいですか?私は内側に質問ループを持っていますが、私は 'RadioGroup group = new RadioGroup(Questionnaire.this);と答えた側の答えループです。 group.setOrientation(RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTALまたはRadioGroup.VERTICAL' –

+0

xmlとjavaコード全体を投稿できますか? 'IllegalstateException'が発生するのは、追加しようとするビューが他のレイアウトに既に追加されているためです。 –

答えて

1

あなたは多くの選択したラジオボタンを得た理由ですRadioGroupに一つだけRadioButtonに追加されます。 RadioGroupは、確認のために最小値2 RadioButtonを必要とします。

これを試して、うまくいくと思います。

JSONArray jsonQuestion = new JSONArray(obj.get("question").toString()); 

for (int iii = 0; iii < jsonQuestion.length(); iii++) { 
    LinearLayout lll = new LinearLayout(Questionnaire.this); 
    lll.setOrientation(LinearLayout.VERTICAL); 

    JSONObject obj2 = (JSONObject) jsonQuestion.get(iii); 
    System.out.println(obj2.get("question")); 

    TextView tv = new TextView(Questionnaire.this); 
    tv.setText(obj2.get("question").toString()); 
    lll.addView(tv); 

    JSONArray jsonAnswer = new JSONArray(obj.get("answer").toString()); 
    Log.d("Reading Answer: ", jsonAnswer + ""); 

    RadioGroup group = new RadioGroup(Questionnaire.this); 
    group.setOrientation(RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTAL or RadioGroup.VERTICAL 

    for (int iiii = 0; iiii < jsonAnswer.length(); iiii++) { 
     JSONObject obj3 = (JSONObject) jsonAnswer.get(iiii); 
     System.out.println(obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())); 
     if (obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())) { 
      TextView tv1 = new TextView(Questionnaire.this); 
      tv1.setText(obj3.get("inputname").toString()); 

      if (obj3.get("inputtype").toString().matches("radio")) { 
       RadioButton newRadioButton = new RadioButton(Questionnaire.this); 
       newRadioButton.setId(Integer.parseInt(obj3.get("answerid").toString())); 
       newRadioButton.setText(obj3.get("inputname").toString()); 
       group.addView(newRadioButton); 
      } 
     } 
    } 
    lll.addView(group); 
    ll.addView(lll); 
} 
+0

こんにちは、私は何が間違っていたのか、それをどう修正するのか分かりますか? –

+0

あなたは 'lll.addView(group);を置く理由を説明できますか? ll.addView(lll); 'out側? –

+1

この行を内部ループの内側に置くのは、1つのRadioGroupに1つのラジオボタンを追加するだけですが、この場合は1つのRadioGroupに追加された内部ループのすべてのRadioButtonです。 –

0

このようにしてみてください。私はあなたが望むようにコードを作っています。

 ScrollView scrollView = (ScrollView) findViewById(R.id.templayout); 
    LinearLayout mLinearLayout = new LinearLayout(this); 
    mLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    mLinearLayout.setOrientation(LinearLayout.VERTICAL); 
    scrollView.addView(mLinearLayout); 
    JSONArray jsonQuestion = new JSONArray(obj.get("question").toString()); 

    for (int iii = 0; iii < jsonQuestion.length(); iii++) { 


     JSONObject obj2 = (JSONObject) jsonQuestion.get(iii); 
     System.out.println(obj2.get("question")); 

     TextView tv = new TextView(Questionnaire.this); 
     tv.setText(obj2.get("question").toString()); 
     mLinearLayout.addView(tv); 

     JSONArray jsonAnswer = new JSONArray(obj.get("answer").toString()); 
     Log.d("Reading Answer: ", jsonAnswer + ""); 

     RadioGroup group = new RadioGroup(Questionnaire.this); 
     group.setOrientation(RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTAL or RadioGroup.VERTICAL 

     for (int iiii = 0; iiii < jsonAnswer.length(); iiii++) { 
      JSONObject obj3 = (JSONObject) jsonAnswer.get(iiii); 
      System.out.println(obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())); 
      if (obj2.get("questiosysid").toString().matches(obj3.get("questionid").toString())) { 
       TextView tv1 = new TextView(Questionnaire.this); 
       tv1.setText(obj3.get("inputname").toString()); 

       if (obj3.get("inputtype").toString().matches("radio")) { 
        RadioButton newRadioButton = new RadioButton(Questionnaire.this); 
        newRadioButton.setId(Integer.parseInt(obj3.get("answerid").toString())); 
        newRadioButton.setText(obj3.get("inputname").toString()); 
        group.addView(newRadioButton); 
       } 
      } 
     } 
     mLinearLayout.addView(group); 
    } 
} 
関連する問題