27

Z mojego zrozumienia, w celu ustalenia, czy pole jest „kliknięcie” i znaleźć jeśli jest sprawdzane, czy nie, kod taki jak mogą być stosowane następujące:Android: RadioGroup - Jak skonfigurować detektor zdarzeń

cb=(CheckBox)findViewById(R.id.chkBox1); 
     cb.setOnCheckedChangeListener(this); 

public void onCheckedChanged(CompoundButton buttonView, 
    boolean isChecked) { 
     if (isChecked) { 
      cb.setText("This checkbox is: checked"); 
     } 
     else { 
      cb.setText("This checkbox is: unchecked"); 
     } 
    } 

Jednak nie jestem w stanie wypracować logiki, jak to zrobić dla grupy radiologicznej.

Oto xml dla mojego radiogroup:

<RadioGroup android:id="@+id/radioGroup1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
    <RadioButton android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/radio1" android:checked="true" 
    android:text="RadioButton1"> 
    </RadioButton> 
    <RadioButton android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/radio2" android:text="RadioButton2" android:checked="true"> 
    </RadioButton> 
    <RadioButton android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/radio3" android:text="RadioButton3"> 
    </RadioButton> 
</RadioGroup> 

Pytanie: Czy muszę skonfigurować inny słuchacz, albo słuchacz już tam także „register” tej grupy?

Również, czy słuchacz powinien zostać ustawiony w RadioGroup lub RadioButton?

Odpowiedz

74

W ten sposób można uzyskać sprawdzane RadioButton:

// This will get the radiogroup 
RadioGroup rGroup = (RadioGroup)findViewById(r.id.radioGroup1); 
// This will get the radiobutton in the radiogroup that is checked 
RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(rGroup.getCheckedRadioButtonId()); 

Aby użyć słuchacza, to zrobić:

+0

ona mówi: „zmienna lokalna rgroup może nie zostały zainicjowane” – Ryan

+4

po prostu napisał, że pierwsza linia powiedzieć, co było rGroup. Aby uzyskać rGroup, musisz napisać to: RadioGroup rGroup = (RadioGroup) findViewById (R.id.radioGroup1); –

+0

Nie dostaję tego, mówi mi, że sprawdzana jest grupa radiologiczna ... ale nie mówi mi, który przycisk opcji jest zaznaczony. Czy czegoś brakuje? – Ryan

14

To powinno być coś takiego.

RadioGroup rb = (RadioGroup) findViewById(R.id.radioGroup1); 
rb.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      switch (checkedId) { 

      } 
     } 

    }); 

podstawie checkedId, nie wiesz, który z radiobutton został wciśnięty, a następnie użyć powyższy kod, aby dowiedzieć się, czy jego zaznaczone lub odznaczone. To jest praca domowa. ;)

+2

Twój kod działa, ale wyjąłem przełącznik i dodałem to zamiast: tv.setText ("bla:" + checkedId) ; ale daje mi kilka dziwne numery dla checkID :( – Ryan

+0

CheckedId jest id z radioobutton, który został kliknięty w grupie.Należy użyć findViewbyId, aby zrozumieć z tego. – PravinCG

+0

Spodziewam się, że to działa, ale nie Kiedy zmieniam wybrany przycisk radiowy na przycisku 3, otrzymuję 3 powiadomienia, które zostały zmienione, wydaje się, że jeden na przycisk, ale dla pierwszego powiadomienia przycisk dla checkedId ma wartość false dla Checked. mnie. –

5
//Within the Activity that hosts this layout, the following method handles the click event for both radio buttons: 

public void onRadioButtonClicked(View view) { 
// Is the button now checked? 
boolean checked = ((RadioButton) view).isChecked(); 

// Check which radio button was clicked 
switch(view.getId()) { 
    case R.id.radio_pirates: 
     if (checked) 
      // Pirates are the best 
     break; 
    case R.id.radio_ninjas:      
     if (checked) 
      // Ninjas rule 
     break; 
} 
} 
0

pomocą przełącznika jest lepsze:

radGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     public void onCheckedChanged(RadioGroup arg0, int id) { 
     switch (id) { 
     case -1: 
      Log.v(TAG, "Choices cleared!"); 
      break; 
     case R.id.chRBtn: 
      Log.v(TAG, "Chose Chicken"); 
      break; 
     case R.id.fishRBtn: 
      Log.v(TAG, "Chose Fish"); 
      break; 
     case R.id.stkRBtn: 
      Log.v(TAG, "Chose Steak"); 
      break; 
     default: 
      Log.v(TAG, "Huh?"); 
      break; 
     } 
     } 
    }); 
Powiązane problemy