Cara mendapatkan indeks yang dipilih dari RadioGroup di Android


213

Apakah ada cara mudah untuk mendapatkan indeks yang dipilih dari RadioGroup di Android atau apakah saya harus menggunakan OnCheckedChangeListener untuk mendengarkan perubahan dan memiliki sesuatu yang membuat indeks terakhir dipilih?

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

jika seorang pengguna memilih option 3saya ingin mendapatkan indeks, 2.

Jawaban:


479

Anda harus dapat melakukan sesuatu seperti ini:

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

Jika RadioGroupmengandung Tampilan lain (seperti a TextView) makaindexOfChild() metode tersebut akan mengembalikan indeks yang salah.

Untuk mendapatkan RadioButtonteks yang dipilih di RadioGroup:

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

11
Tetapi bagaimana jika tombol-tombol itu tidak memiliki android:idatribut yang ditetapkan?
neuront

@ BP saya memiliki keraguan yang sama dalam mengakses tombol radio ketika tidak ada orang tua atau id tombol radio yang ditetapkan.
Killer

2
@neuront Selama Anda melakukan radioGroup.findViewById (radioButtonID) itu akan berfungsi. RadioGroup tidak menetapkan 1, 2, 3, 4, dan seterusnya sebagai ID tampilan, jadi jika Anda mencari mereka dalam konteksnya, itu akan berfungsi
Reinherd

Ini tidak berfungsi jika RadioButton default (dan tidak tersentuh oleh Pengguna) diselesaikan.
Ninja Coding

2
@NinjaCoding Jika Anda melakukan kesalahan yang sama dengan saya, Anda harus mengatur tombol radio default (awal) dengan memanggil radioGroup.check (terpilihRadioButton.id), bukan radioButton.setChecked (true).
Lensflare

108

Ini seharusnya bekerja,

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

5
Gunakan getActivity (). FindViewById () jika Anda menggunakan dalam Fragmen.
Sanjeet A

56

Anda dapat memiliki referensi ke grup radio dan gunakan getCheckedRadioButtonId ()untuk mendapatkan id tombol radio yang diperiksa. Coba lihat di sini

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

Kemudian ketika Anda perlu mendapatkan opsi radio yang dipilih.

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

ya, ini adalah id dari tombol radio yang dicentang, tetapi bagaimana dengan indeks tombol radio dalam grup radio?
John Boker

saya bisa mendapatkan id, saya ingin indeks, mereka berbeda.
John Boker

apa yang Anda maksud dengan indeks? apakah itu dalam tampilan daftar?
Stefan Bossbaly

jika saya memiliki 5 radiobuttons di radiogroup, dan pengguna memilih yang ke-3 yang saya ingin dapatkan 2, indeks dari radiobutton yang dipilih di radiogroup. ini bukan listview.
John Boker

hanya untuk mengklarifikasi jika pengguna memilih tombol ke-3 Anda ingin mendapatkan yang ke-2? grup dan tombol radio tidak memiliki indeks.
Stefan Bossbaly

27

coba ini

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

Ini berhasil! Tetapi saya tidak mengerti mengapa kita perlu menggunakan tampilan "radioButton" ini ..
AlexS


9

Kamu bisa memakai:

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

6

// gunakan untuk mendapatkan id dari item yang dipilih

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// dapatkan tampilan item yang dipilih

View selectedView = (View)findViewById( selectedID);

6

Ini bekerja dengan baik untuk saya dengan cara ini:

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

5

Yang Anda butuhkan hanyalah menetapkan nilai terlebih dahulu ke RadioButton Anda, misalnya:

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

dan kemudian setiap kali tombol radio spacific ini akan dipilih, Anda dapat menarik nilainya dengan ID yang Anda berikan

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

Bersulang!


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

gunakan saja ini:

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

1

Anda dapat melakukan

findViewById

dari grup radio.

Ini dia contohnya:

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

1

Anda bisa saja

-Deklarasikan grup radio dan tombol radio dari metode onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-set id tampilan dalam metode onCreate

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

-mengambil id radiobutton yang dipilih menggunakan

int id = GroupName.getCheckedRadioButtonId();

-menggunakan id untuk mencocokkan tampilan buttonselected

NameButton = (RadioButton) findViewById(id);

- Akhirnya mendapatkan nilai tombol radio

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

--- PS: JIKA ANDA INGIN NILAI INT, MAKA ANDA BISA MELAKUKANNYA

int valueExpectedIn = Integer.parseInt(valueExpected);

1

Berikut ini adalah ekstensi Kotlin untuk mendapatkan posisi yang benar bahkan jika grup Anda berisi TextView atau non-RadioButton.

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();
        }
    });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.