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.

John Boker
sumber

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();
BP.
sumber
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()));
source.rar
sumber
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
    }
}
Stefan Bossbaly
sumber
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);
            }
        });
Nooh
sumber
Ini berhasil! Tetapi saya tidak mengerti mengapa kita perlu menggunakan tampilan "radioButton" ini ..
AlexS
9

Kamu bisa memakai:

RadioButton rb = (RadioButton) findViewById(rg.getCheckedRadioButtonId());
Marco Fantasia
sumber
6

// gunakan untuk mendapatkan id dari item yang dipilih

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// dapatkan tampilan item yang dipilih

View selectedView = (View)findViewById( selectedID);
Jhoe-mar Pagao
sumber
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();
Shinz6
sumber
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!

ravid rinek
sumber
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();
     }
  });
Vikash Sharma
sumber
2
 int index_selected = radio_grp.indexOfChild(radio_grp
                .findViewById(radio_grp.getCheckedRadioButtonId()));
Prashant Maheshwari Andro
sumber
2

gunakan saja ini:

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

Anda dapat melakukan

findViewById

dari grup radio.

Ini dia contohnya:

((RadioButton)my_radio_group.findViewById(R.id.radiobtn_veg)).setChecked(true);
Faheem
sumber
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);
Andrea Gurioli
sumber
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
}
Tarek360
sumber
0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)
Anand Kumar
sumber
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();
        }
    });
Meysam Keshvari
sumber