Làm cách nào để đặt OnClickListener trên RadioButton trong Android?


109

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:


234

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

2
Không phù hợp với tôi, Eclipse đề nghị tôi thêm @Override và điều đó đã được khắc phục. Cảm ơn
Jack Franzen,

yea, tôi sẽ sử dụng radiogroup ngoại trừ nó không hoạt động trừ khi nó là phụ huynh trực tiếp của nó trong xml và tôi không thể giữ nó làm phụ huynh trực tiếp vì nút radio ngu ngốc này không thể được căn chỉnh cho chính giữa vì vậy tôi phải đặt nó trong một tuyến tính ...
Jaxx0rr

bạn có thể thử căn giữa nút radio bằng cách đặt android :vity = "center" vào xml dưới thẻ RadioGroup. @RudolfRein
OuuGiii

Chúng ta phải làm gì nếu radiobutton được tạo động và không có id?
Arjun Issar

46

Hy vọng điều này sẽ giúp bạn...

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...
 }
};

1
Làm việc như một sự quyến rũ, đừng quên thêm dấu chấm phẩy sau dấu ngoặc nhọn cuối cùng của bạn trên trình nghe khi nhấp chuột của bạn
inVINCEable 22/12/14

Cũ nhưng tốt. Câu trả lời được chấp nhận là gọn gàng hơn nhưng không xử lý được trường hợp người dùng chọn thứ gì đó đã được chọn. Điều này xử lý nó. Thật xấu hổ khi người nghe nhóm radio không xử lý "setSelected" mà không quan tâm đến "đã thay đổi".
JamieB

27
 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();
        }
    });

1
grouplà cần thiết trong RadioButton rb=(RadioButton)group.findViewById(checkedId);
stupidity Artificial

18

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

10

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.


7

Đề 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()

5

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.


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

Vui lòng cung cấp giải thích cho câu trả lời này thay vì chỉ đăng mã.
ScoobyDrew 18

dòng cuối cùng cần phải là: 'String slectedValue = radioButton.getText (). toString ()'
Web.

0

Đố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!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.