2013-04-11 4 views
15

Я новичок в android domain ..Как я могу снять или сбросить переключатель?

Я разрабатываю приложение для викторины. Там будет один вопрос и 4 варианта (переключатели), когда пользователь откроет эту кнопку, будет отключена, но проблема возникает, когда пользователь отвечает на 1 квест и когда он отправляется на следующий квест-переключатель. Будет снята отметка/сбросьте переключатели для каждого вопроса. Как я могу это сделать?

Спасибо заранее ...

answ1=new ArrayList<String>(new ArrayList<String>(answ1)); 
     btn_practice1.setText(answ1.get(0)); 
     btn_practice2.setText(answ1.get(1)); 
     btn_practice3.setText(answ1.get(2)); 
     btn_practice4.setText(answ1.get(3)); 
     btn_practicerg.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) {    
       RadioButton radioButton = (RadioButton)group. findViewById(checkedId); //line 262 
       String temp = radioButton.getText().toString(); 
       switch(btn_practicerg.getCheckedRadioButtonId()){ 
       case R.id.RB1: 
        if (btn_practice1.isChecked()){ 
         btn_practice2.setChecked(false); 
         btn_practice3.setChecked(false); 
         btn_practice4.setChecked(false); 
        } 
        break; 
       case R.id.RB2: 
        if (btn_practice2.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice3.setChecked(false); 
         btn_practice4.setChecked(false); 
        }      
        break; 
       case R.id.RB3: 
        if (btn_practice3.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice2.setChecked(false); 
         btn_practice4.setChecked(false); 
        } 
        break; 
       case R.id.RB4: 
        if (btn_practice4.isChecked()){ 
         btn_practice1.setChecked(false); 
         btn_practice2.setChecked(false); 
         btn_practice3.setChecked(false); 
        }     
        break; 
       default: 
        btn_practice1.setChecked(false); 
        btn_practice2.setChecked(false); 
        btn_practice3.setChecked(false); 
        btn_practice4.setChecked(false); 
       } 
     ImageView nextBtn = (ImageView) findViewById(R.id.nxt_btn); 
    nextBtn.setOnClickListener(new Button.OnClickListener(){ 
    public void onClick(View v){ 
     btn_practicerg.clearCheck(); //line 355 
       } 
      }); 

Logcat

 E/AndroidRuntime(729):at  
     com.example.TEENEINSTIEN.Question$LoadQuestions$2.onCheckedChanged(Question.java:262) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.setCheckedId(RadioGroup.java:172) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.check(RadioGroup.java:166) 
     E/AndroidRuntime(729):at android.widget.RadioGroup.clearCheck(RadioGroup.java:205) 
     E/AndroidRuntime(729):at 
     com.example.TEENEINSTIEN.Question$LoadQuestions$3.onClick(Question.java:355) 
     E/AndroidRuntime(729):at android.view.View.performClick(View.java:2485) 
     E/AndroidRuntime(729):at android.view.View$PerformClick.run(View.java:9080) 

Я стараюсь, как это, но я не могу в состоянии отмените ..

+1

Я думаю, что на самом деле вам нужно использовать RadioGroup если так проверьте ссылки http://developer.android.com/reference/android/widget/RadioGroup.html HTTP : //stackoverflow.com/questions/6780981/android-radio-group-question –

+0

Прежде всего, вам следует рассмотреть возможность использования Rad ioGroup, чтобы избежать необходимости «снижать» их вручную. – damian

+0

RadioGroup только я использовал, btn_practicerg свою единственную группу радио в моем коде ... –

ответ

15

Я думаю, что е проблема заключается в с btn_practicerg объекта т.е. при создании нового объекта RadioGroup каждый раз показывая новый вопрос, то вы должны выполнить RadioGroup.clearCheck() на новом btn_practicerg объекта вместо старого, что я думаю, что вы делаете в данный момент.

и более bettrly сделать folliwing:

btn_practice1.setText(answ1.get(0)); 
    btn_practice2.setText(answ1.get(1)); 
    btn_practice3.setText(answ1.get(2)); 
    btn_practice4.setText(answ1.get(3)); 
    btn_practice1.setChecked(false); 
    btn_practice2.setChecked(false); 
    btn_practice3.setChecked(false); 
    btn_practice4.setChecked(false); 

, чтобы снять все кнопки в начале. Я надеюсь, что это решит вашу проблему ..

+1

Снять его, но одна проблема, в 1-ом вопросе я выбираю option1, означает ту же опцию1, если выбрать в 2-ом квесте, не отмечая или не выбирая, если другие параметры выбирают его ... –

35

Положите все ваши кнопки в RadioGroup, тогда, когда вам нужно их очистить, используйте RadioGroup.clearCheck();

+1

Я использовал это, оно выдает ошибку. Я не могу понять. см. в моем коде .. –

+0

Вы видели мой logcat..и выдает ошибку, подобную этому .. –

+0

Это должен быть принятый ответ, поскольку он уменьшает шаблонный код и улучшает читаемость. –

2

Попробуйте это, та же проблема, удалось решить с помощью этого решения:

  1. набор OnClick метод все 4 радиокнопки сказать radio1Clicked, radio2Clicked & так далее
  2. в соответствующем методе OnClick добавьте ниже код:

    public void radio1Clicked(View view) 
    { 
        // Note that I have unchecked radiobuttons except the one 
        // which is clicked/checked by user 
        radio2Button.setChecked(false); 
        radio3Button.setChecked(false); 
        radio4Button.setChecked(false); 
    } 
    
  3. simillarly сделать для оставшихся radiob uttons. Надеюсь, что это решит вашу проблему.

Пожалуйста, задавайте любые вопросы относительно решения.

+0

Не работает в адаптере .. – Sam

1

У меня была только одна кнопка, и я действительно не хотел создавать группу переключателей. Проверка onClick и if и else не работала, чтобы вручную проверить и снять флажок. Я прочитал пару сообщений с прослушивателями onRadioButtonClick и т. Д.

Сначала я попытался поменять на checkbox-> ту же проблему. Затем я попробовал CheckedTextView и что вы знаете, он действительно работал как переключатель.Поэтому в основном я добавил кнопку радио затем оставил текст пустой, добавил checkedTextView рядом с ним (дублирующих друг друга), то связывал функции OnClick в checkedTextView к функции переключения ->

public void toggle(View view) 
{ 
    if(checkedTextView.isChecked()) 
    { 
     checkedTextView.setChecked(false); 
     actualRadioBtn.setChecked(false); 
    } 
    else 
    { 
     checkedTextView.setChecked(true); 
     actualRadioBtn.setChecked(true); 
    } 
} 

Тогда в функции, где вы проверяете если переключатель выбран, вы можете просто использовать

if(actualRadioBtn.isChecked()).... 
Смежные вопросы