2014-02-04 4 views
0

Итак, я пытаюсь сделать простую викторину, и я хочу убедиться, что пользователь отвечает на все вопросы, прежде чем перейти к следующему действию. При запуске кнопка, которую я установил, недоступна, и я хочу сделать ее доступной ТОЛЬКО, если на все вопросы был дан ответ. Я не могу понять, где и как проверить, есть ли у всего вопроса ответ.Как убедиться, что все переключатели отмечены пользователем?

public class Quiz extends Activity 
{ 
Button buttHole; 


String countryName[] = { "India", "Pakistan", "China", "Nepal", "Pichmaala", "Blah" }; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 
    buttHole = (Button)findViewById(R.id.button1); 

    buttHole.setEnabled(false); 

    //Creating the list of Questions 
    LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.linear1); 

     for (int i = 1; i <= 3; i++)   
     { 
     //create text button 
     TextView title = new TextView(this); 
     title.setText("Question Number:" + i); 
     title.setTextColor(Color.GREEN); 
     mLinearLayout.addView(title); 

     // create radio button 
     final RadioButton[] rb = new RadioButton[countryName.length]; 
     RadioGroup radGr = new RadioGroup(this); 
     radGr.setOrientation(RadioGroup.VERTICAL); 
     radGr.setOnClickListener(l) 

     for (int j = 0; j < countryName.length; j++) 
     { 
     rb[j] = new RadioButton(this); 
     radGr.addView(rb[j]); 
     rb[j].setText(countryName[j]);  
     } 
     mLinearLayout.addView(radGr); 
     } 



} 

}

+0

Вы должны получить выбранный переключатель для каждой группы радио, используя 'getCheckedRadioButtonId()'. Это вернет -1, если кнопка не выбрана. – nikmin

+0

Я не знаю, что вы делаете. Но я проверяю свое второе решение. Который работает безупречно согласно вашему требованию. Это даст вам «ложь», если какой-либо из ответов на вопрос останется. И это ваш вопрос: «Я не могу понять, где и как проверить, есть ли у всего вопроса ответ». И его работа прекрасна в моем ответе. Если метод возвращает 'false', значит, более одного ответа осталось ответить. И «истина» означает, что все ответы даны. –

+0

Хм, хорошо, это становится довольно интересной проблемой. Дай мне подумать. Где я могу вызвать метод checkQuestionsAnswer()? Я использую метод onCreate вне цикла for, это правильно? Если я не назову это, код не будет достигнут. Также я вижу, что u имеет onClickListener «l», где вы объявляете переменную «l», так как я не вижу ее объявления в предложенном вами решении. Я удалил radGr.setOnClickListener (l); поскольку он не объявлен нигде и не используется. Мне очень жаль, но эта проблема прослушивает меня весь день, и мне на нервы – user3182266

ответ

0

Попробуйте следующий код, чтобы проверить, является ли пользователь дал ответ на все вопросы или не

Первое решение

int count = mLinearLayout.getChildCount(); 

for(int i=1;i<count ;i+=2){ 
    RadioGroup rg = (RadioGroup) mLinearLayout.getChildAt(i); 
    if(rg.getCheckedRadioButtonId()==-1){ 
     //Answer is not selected 
     //Do something to prevent execution 
     break; 
    } 
} 

Второе решение

public class Quiz extends Activity { 
Button buttHole; 

String countryName[] = { "India", "Pakistan", "China", "Nepal", 
     "Pichmaala", "Blah" }; 

ArrayList<RadioGroup> arrGroup; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 
    buttHole = (Button) findViewById(R.id.button1); 

    buttHole.setEnabled(false); 

    // Creating the list of Questions 
    LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.linear1); 
    arrGroup = new ArrayList<RadioGroup>(); 

    for (int i = 1; i <= 3; i++) { 
     // create text button 
     TextView title = new TextView(this); 
     title.setText("Question Number:" + i); 
     title.setTextColor(Color.GREEN); 
     mLinearLayout.addView(title); 

     // create radio button 
     final RadioButton[] rb = new RadioButton[countryName.length]; 
     RadioGroup radGr = new RadioGroup(this); 
     // take a reference of RadioGroup view 
     arrGroup.add(radGr); 

     radGr.setOrientation(RadioGroup.VERTICAL); 
     radGr.setOnClickListener(l); 

     for (int j = 0; j < countryName.length; j++) { 
      rb[j] = new RadioButton(this); 
      radGr.addView(rb[j]); 
      rb[j].setText(countryName[j]); 
     } 
     mLinearLayout.addView(radGr); 
    } 
} 

public boolean checkQuestionsAnswer() { 
    int count = arrGroup.size(); 

    for (int i = 0; i < count; i++) { 
     if (arrGroup.get(i).getCheckedRadioButtonId() == -1) { 
      //Return false, answer is remaining to given 
      //You can pass here position also to know question number 
      return false; 
     } 
    } 
    //Return true if all answer are given 
    return true; 
} 
} 
+0

С вашим кодом программа вылетает на RadioGroup rg = (RadioGroup) mLinearLayout.getChildAt (i); // источник не найден – user3182266

+0

@ user3182266 можете ли вы поместить для этого полную трассировку стека (журналы). –

+0

java.lang.ClassCastException: android.widget.TextView нельзя отнести к android.widget.RadioGroup – user3182266

0

Идентификатор radobuttons id также, и когда вы собираетесь отправить эту форму (например) на кнопку нажмите, получить объект-переключатель по идентификатору, а затем проверить radiobutton.isChecked().

+0

Вы можете мне показать код? – user3182266

Смежные вопросы