Làm cách nào để lấy chỉ mục đã chọn của Radiogroup trong Android


213

Có cách nào dễ dàng để lấy chỉ mục được chọn của Radiogroup trong Android hay tôi phải sử dụng OnCheckedChangeListener để lắng nghe các thay đổi và có thứ gì đó giữ chỉ mục cuối cùng được chọn?

ví dụ xml:

<RadioGroup android:id="@+id/group1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <RadioButton android:id="@+id/radio1" android:text="option 1" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio2" android:text="option 2" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio3" android:text="option 3" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio4" android:text="option 4" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <RadioButton android:id="@+id/radio5" android:text="option 5" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</RadioGroup>

nếu người dùng chọn option 3tôi muốn lấy chỉ mục, 2.

Câu trả lời:


479

Bạn sẽ có thể làm một cái gì đó như thế này:

int radioButtonID = radioButtonGroup.getCheckedRadioButtonId();
View radioButton = radioButtonGroup.findViewById(radioButtonID);
int idx = radioButtonGroup.indexOfChild(radioButton);

Nếu RadioGroupchứa các Chế độ xem khác (như a TextView) thì indexOfChild()phương thức sẽ trả về chỉ mục sai.

Để có được RadioButtonvăn bản đã chọn trên RadioGroup:

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();

11
Nhưng nếu các nút đó không android:idđược đặt thuộc tính thì sao?
thần kinh

@BP Tôi có cùng nghi ngờ trong việc truy cập các nút radio khi không có id nào của nút cha hoặc nút radio được đặt.
Kẻ giết người

2
@neuront Miễn là bạn làm radiogroup.findViewById (radioButtonID) thì nó sẽ hoạt động. Radiogroup đã đặt 1, 2, 3, 4, v.v. làm ID của chế độ xem, vì vậy nếu bạn tìm kiếm chúng trong bối cảnh của nó, nó sẽ hoạt động
Reinherd

Điều này không hoạt động nếu RadioButton mặc định (và không được chạm tới) được giải quyết.
Mã hóa Ninja

2
@NinjaCoding Nếu bạn mắc lỗi tương tự như tôi, bạn phải đặt nút radio mặc định (ban đầu) bằng cách gọi radiogroup.check (chọnRadioButton.id), không phải radioButton.setChecked (true).
Lensflare 17/10/18

108

Điều này sẽ làm việc,

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));

5
Sử dụng getActivity (). FindViewById () nếu bạn đang sử dụng trong Fragment.
Sanjeet A

56

Bạn có thể có một tham chiếu đến nhóm radio và sử dụng getCheckedRadioButtonId ()để lấy id nút radio đã kiểm tra. Hãy xem ở đây

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radio_group);

Sau đó, khi bạn cần để có được tùy chọn radio đã chọn.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}

vâng, đây là id của nút radio đã kiểm tra, nhưng còn chỉ số của nút radio trong nhóm radio thì sao?
John Boker

Tôi có thể lấy id, tôi muốn chỉ mục, chúng khác nhau.
John Boker

bạn có ý nghĩa gì bởi chỉ số? Có phải trong một danh sách xem?
Stefan Bossbaly

nếu tôi có 5 radiobutton trong radiogroup và người dùng chọn cái thứ 3 tôi muốn lấy 2, chỉ số của radiobutton đã chọn trong radiogroup. đây không phải là một danh sách
John Boker

chỉ để làm rõ nếu người dùng chọn nút thứ 3 bạn muốn lấy nút thứ 2? nhóm radio và nút không có chỉ mục.
Stefan Bossbaly

27

thử cái này

        RadioGroup  group= (RadioGroup) getView().findViewById(R.id.radioGroup);
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                View radioButton = radioGroup.findViewById(i);
                int index = radioGroup.indexOfChild(radioButton);
            }
        });

Đây là công trình! Nhưng tôi không thể hiểu tại sao chúng ta cần sử dụng Chế độ xem "radioButton" này ..
AlexS


9

Bạn có thể dùng:

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());

6

// sử dụng để lấy id của mục đã chọn

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// lấy chế độ xem của mục đã chọn

View selectedView = (View)findViewById( selectedID);

6

Nó hoạt động hoàn hảo với tôi theo cách này:

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
    int radioButtonID = radioGroup.getCheckedRadioButtonId();
    RadioButton radioButton = (RadioButton) radioGroup.findViewById(radioButtonID);
    String selectedtext = (String) radioButton.getText();

5

Tất cả những gì bạn cần là đặt giá trị trước cho RadioButton của bạn, ví dụ:

RadioButton radioButton = (RadioButton)findViewById(R.id.radioButton);      
radioButton.setId(1);        //some int value

và sau đó bất cứ khi nào đài phát thanh không gian này được chọn, bạn có thể lấy giá trị của nó bằng Id mà bạn đã cung cấp cho nó

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup);                     
int whichIndex = radioGroup.getCheckedRadioButtonId(); //of course the radioButton
                                                       //should be inside the "radioGroup"
                                                       //in the XML

Chúc mừng!


5
radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

  btnDisplay=(Button)findViewById(R.id.button);

  btnDisplay.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        int selectedId=radioSexGroup.getCheckedRadioButtonId();
        radioSexButton=(RadioButton)findViewById(selectedId);
        Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
     }
  });

2
 int index_selected = radio_grp.indexOfChild(radio_grp
                .findViewById(radio_grp.getCheckedRadioButtonId()));

2

chỉ sử dụng cái này

    int index = 2;
    boolean option3Checked = radioGroup.getCheckedRadioButtonId() == radioGroup.getChildAt(2).getId();

1

bạn có thể làm

findViewById

từ nhóm phát thanh.

Đây là mẫu:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);

1

Bạn có thể đơn giản

-declare nhóm radio và một nút radio ra khỏi phương thức onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-set id xem trong phương thức onCreate

GrupName = (RadioGroup) findViewById(R.id.radioGroupid);

-tạo id radiobutton được chọn bằng cách sử dụng

int id = GroupName.getCheckedRadioButtonId();

-sử dụng id để khớp với chế độ xem được chọn

NameButton = (RadioButton) findViewById(id);

- cuối cùng nhận được giá trị của nút radio

String valueExpected = NameButton.getText().toString();

--- PS: NẾU BẠN MUỐN MỘT GIÁ TRỊ INT, THÌ BẠN CÓ THỂ KIẾM ĐƯỢC

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Đây là một tiện ích mở rộng Kotlin để có được vị trí chính xác ngay cả khi nhóm của bạn có TextView hoặc bất kỳ RadioButton nào.

fun RadioGroup.getCheckedRadioButtonPosition(): Int {
    val radioButtonId = checkedRadioButtonId
    return children.filter { it is RadioButton }
        .mapIndexed { index: Int, view: View ->
            index to view
        }.firstOrNull {
            it.second.id == radioButtonId
        }?.first ?: -1
}

0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)

0
radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnDisplay.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // get selected radio button from radioGroup
            int selectedId = radioSexGroup.getCheckedRadioButtonId();
            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);
Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
        }
    });
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.