2011-11-30 53 views

回答

180

我认为更好的办法是使用RadioGroup并设置监听这个变化和更新View因此(节省你有2或3或4等听众)。在<RadioButton/>标签android:onClick="onRadioButtonClicked"

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);   
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      // checkedId is the RadioButton selected 
     } 
    }); 
+0

不是为我工作添加一个分号,Eclipse的建议我加@覆盖,而固定。由于 –

+0

啊,我会用RadioGroup中,除了它在XML不工作,除非其直接父,我不能把它作为一个直接的父母,因为这个愚蠢的单选按钮无法对齐居中,所以我不得不把它们放在一个LinearLayout中... –

+0

你可以在RadioGroup标签下的xml中放置** android:gravity =“center”**来尝试将radiobutton对中。 @RudolfRein – OuuGiii

35

希望这将帮助你...

RadioButton rb = (RadioButton) findViewById(R.id.yourFirstRadioButton); 
rb.setOnClickListener(first_radio_listener); 

OnClickListener first_radio_listener = new OnClickListener(){ 
public void onClick(View v) { 
    //Your Implementaions... 
} 
}; 
+3

有时是清晰的有三个独立的处理程序。+1 –

+1

工作就像一个魅力,不要忘记你过去的大括号后您的点击收听 – inVINCEable

7

您也从XML布局添加监听器。

<RadioButton android:id="@+id/radio_pirates" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/pirates" 
    android:onClick="onRadioButtonClicked"/> 

查看Android developer SDK- Radio Buttons了解详情。

20
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() 
    { 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      // checkedId is the RadioButton selected 
      RadioButton rb=(RadioButton)findViewById(checkedId); 
      textViewChoice.setText("You Selected " + rb.getText()); 
      //Toast.makeText(getApplicationContext(), rb.getText(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
6

万一别人与接受的答案struggeling:

有不同OnCheckedChangeListener接口。我添加到第一个看看CheckBox是否被更改。

import android.widget.CompoundButton.OnCheckedChangeListener; 

VS

import android.widget.RadioGroup.OnCheckedChangeListener; 

当从瑞奇添加片断我有错误:

在类型RadioGroup中的方法setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener)是不适用的参数(新CompoundButton.OnCheckedChangeListener(){})

可以固定答案从阿里:

new RadioGroup.OnCheckedChangeListener() 
16

的问题是关于检测哪个单选按钮被点击,这是你如何能得到被点击

final RadioGroup radio = (RadioGroup) dialog.findViewById(R.id.radioGroup1); 
     radio.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 

       View radioButton = radio.findViewById(checkedId); 
       int index = radio.indexOfChild(radioButton); 

       // Add logic here 

       switch (index) { 
       case 0: // first button 

        Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show(); 
        break; 
       case 1: // secondbutton 

        Toast.makeText(getApplicationContext(), "Selected button number " + index, 500).show(); 
        break; 
       } 
      } 
     }); 
2

哪个按钮由于这问题不是特定于Java,我想补充说明如何在Kotlin

radio_group_id.setOnCheckedChangeListener({ radioGroup, optionId -> { 
     when (optionId) { 
      R.id.radio_button_1 -> { 
       // do something when radio button 1 is selected 
      } 
      // add more cases here to handle other buttons in the RadioGroup 
     } 
    } 
}) 

这里radio_group_id是有关RadioGroup中的分配android:id。要以这种方式使用它,您需要在您活动的Kotlin文件中导入kotlinx.android.synthetic.main.your_layout_name.*。还要注意,在情况下,radioGroup拉姆达参数是未使用的,它可以被用_(下划线),因为科特林1.1代替。

相关问题