2016-10-13 2 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); 

} 

Это мой код для динамического добавления переключателя.радиогруппа не работает и вертикальное выравнивание андроида

Проблема в том, что я выбираю один вариант, затем выбираю пыльник, который не отменяет предыдущий. Почему он не отменяет выбор первого, выбрав другой, когда они оба добавлены в ту же группу радиостанций. Кроме того, не размещая радиокнопки рядом друг с другом, но друг на друга, когда ориентация установлена ​​на горизонтальной

UPDATE

Я переехал мою декларацию

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

out side parent for loop теперь я получаю

java.lang.IllegalStateException: Спецификация у ребенка уже есть родитель. Сначала вы должны вызвать removeView() родителя ребенка.

Как мне с этим справиться?

+1

«... когда они оба добавлены в одну группу радио». - Ты уверен, что они все в одной «Радиогруппе»? Похоже, вы создаете новую «RadioGroup» для каждого нового «RadioButton». Это, вероятно, также объясняет вашу проблему с ориентацией. –

+0

@MikeM. у меня есть это в цикле, поэтому я переместил его извне из-за того, что вы сказали сейчас, я получаю 'java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() для родителя ребенка. «Как мне с этим справиться? У меня есть цикл вопросов внутри - это цикл ответа, который только что вышел из цикла ответа. Я объявил «Группа RadioGroup = новая RadioGroup (Questionnaire.this); group.setOrientation (RadioGroup.HORIZONTAL); // RadioGroup.HORIZONTAL или RadioGroup.VERTICAL' –

+0

можете ли вы разместить весь код xml и java? 'IllegalstateException' возникает, потому что просмотр вашей попытки добавления уже добавлен в другой макет. –

ответ

1

вы добавили только один RadioButton в RadioGroup, поэтому у вас есть много выбранной кнопки радио. 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 side? –

+1

, если вы поместите эту строку внутри внутреннего цикла, чем добавьте только одну радиокнопку в одну радиогруппу, но в этом случае все RadioButton внутреннего цикла добавляются в одну RadioGroup. –

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); 
    } 
}