webentwicklung-frage-antwort-db.com.de

Android: RadioGroup - So konfigurieren Sie den Ereignis-Listener

Um zu bestimmen, ob ein Kontrollkästchen "angeklickt" ist und um festzustellen, ob es aktiviert ist oder nicht, kann nach meinem Verständnis ein Code wie der folgende verwendet werden:

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

Ich bin jedoch nicht in der Lage, die Logik zu erarbeiten, wie die obigen Schritte für eine Funkgruppe ausgeführt werden sollen.

Hier ist die XML-Datei für meine 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>

Frage: Muss ich einen anderen Listener einrichten, oder wird der bereits dort befindliche Listener diese Gruppe auch "registrieren"?

Soll der Listener auch in der RadioGroup oder im RadioButton eingerichtet werden?

35
Ryan

So erhalten Sie den aktivierten 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());

So verwenden Sie den Listener:

// This overrides the radiogroup onCheckListener
rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {
        // This will get the radiobutton that has changed in its check state
        RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
        // This puts the value (true/false) into the variable
        boolean isChecked = checkedRadioButton.isChecked();
        // If the radiobutton that has changed in check state is now checked...
        if (isChecked)
        {
            // Changes the textview's text to "Checked: example radiobutton text"
            tv.setText("Checked:" + checkedRadioButton.getText());
        }
    }
});
96
A. Abiri

Es sollte so etwas sein.

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

            }
        }

    });

Anhand der checkedId würden Sie wissen, welcher der Radiobuttons angeklickt wurde, und dann anhand des obigen Codes herausfinden, ob er aktiviert oder deaktiviert ist. Das sind Hausaufgaben. ;)

18
PravinCG

Verwenden von Switch ist besser:

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;
        }
      }
    });
7
Diego Venâncio
//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;
}
}
6
TheSwiftGuy77