Tôi có hai RadioButtons bên trong a RadioGroup. Tôi muốn đặt OnClickListenertrên những RadioButtons. Tùy thuộc vào cái nào RadioButtonđược nhấp, tôi muốn thay đổi văn bản của một EditText. Làm thế nào tôi có thể đạt được điều này?
Tôi có hai RadioButtons bên trong a RadioGroup. Tôi muốn đặt OnClickListenertrên những RadioButtons. Tùy thuộc vào cái nào RadioButtonđược nhấp, tôi muốn thay đổi văn bản của một EditText. Làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
Tôi nghĩ rằng một cách tốt hơn là sử dụng RadioGroupvà đặt người nghe vào điều này để thay đổi và cập nhậtView phù hợp (giúp bạn có 2 hoặc 3 hoặc 4 người nghe, v.v.).
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
}
});
Hy vọng điều này sẽ giúp bạn...
RadioButton rb = (RadioButton) findViewById(R.id.yourFirstRadioButton);
rb.setOnClickListener(first_radio_listener);
và
OnClickListener first_radio_listener = new OnClickListener (){
public void onClick(View v) {
//Your Implementaions...
}
};
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();
}
});
grouplà cần thiết trong RadioButton rb=(RadioButton)group.findViewById(checkedId);
Câu hỏi là về Phát hiện nút radio nào được nhấp, đây là cách bạn có thể nhận được nút nào được nhấp
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;
}
}
});
Bạn cũng có thể thêm trình xử lý từ bố cục XML: android:onClick="onRadioButtonClicked"trong <RadioButton/>thẻ của mình .
<RadioButton android:id="@+id/radio_pirates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pirates"
android:onClick="onRadioButtonClicked"/>
Xem SDK dành cho nhà phát triển Android- Nút radio để biết chi tiết.
Đề phòng trường hợp ai đó đang đấu tranh với câu trả lời được chấp nhận:
Có các giao diện OnCheckedChangeListener-khác nhau. Tôi đã thêm vào cái đầu tiên để xem CheckBox có bị thay đổi hay không.
import android.widget.CompoundButton.OnCheckedChangeListener;
vs
import android.widget.RadioGroup.OnCheckedChangeListener;
Khi thêm đoạn mã từ Ricky, tôi gặp lỗi:
Phương thức setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener) trong loại RadioGroup không áp dụng cho các đối số (CompoundButton.OnCheckedChangeListener () {} mới)
Có thể được khắc phục với câu trả lời từ Ali:
new RadioGroup.OnCheckedChangeListener()
Vì câu hỏi này không dành riêng cho Java, tôi muốn thêm cách bạn có thể thực hiện nó trong 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
}
}
})
Đây radio_group_idlà nhiệm vụ android:idcủa RadioGroup có liên quan. Để sử dụng nó theo cách này, bạn cần nhập kotlinx.android.synthetic.main.your_layout_name.*vào tệp Kotlin của hoạt động của mình. Cũng lưu ý rằng trong trường hợp radioGrouptham số lambda không được sử dụng, nó có thể được thay thế bằng _(dấu gạch dưới) kể từ Kotlin 1.1.
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.yourRadioGroup);
radioGroup.setOnClickListener(v -> {
// get selected radio button from radioGroup
int selectedId = radioGroup.getCheckedRadioButtonId();
// find the radiobutton by returned id
radioButton = findViewById(selectedId);
String slectedValue=radioButton.getText()
});
Đối với Kotlin Ở đây đã thêm biểu thức lambda và Mã tối ưu hóa.
radioGroup.setOnCheckedChangeListener { radioGroup, optionId ->
run {
when (optionId) {
R.id.radioButton1 -> {
// do something when radio button 1 is selected
}
R.id.radioButton2 -> {
// do something when radio button 2 is selected
}
// add more cases here to handle other buttons in the your RadioGroup
}
}
}
Hy vọng điều này sẽ giúp bạn. Cảm ơn!