web-dev-qa-db-ja.com

Android:RadioGroup-イベントリスナーの構成方法

私の理解では、チェックボックスが「クリック」されているかどうかを判断し、チェックされているかどうかを確認するには、次のようなコードを使用できます。

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

しかし、ラジオグループに対して上記を行う方法についてのロジックを理解することはできません。

RadioGroupのxmlは次のとおりです。

<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>

質問:別のリスナーをセットアップする必要がありますか、それともリスナーはこのグループに既に「登録」していますか?

また、リスナーをRadioGroupまたはRadioButtonに設定する必要がありますか?

35
Ryan

これは、チェックされたラジオボタンを取得する方法です。

// 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());

リスナーを使用するには、次のようにします。

// 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

このようなものでなければなりません。

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

            }
        }

    });

CheckedIdに基づいて、どのラジオボタンがクリックされたかがわかり、上記のコードを使用して、チェック済みか未チェックかを判断します。これは宿題です。 ;)

18
PravinCG

Switchを使用することをお勧めします。

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