Como obter o índice selecionado de um RadioGroup no Android

213

Existe uma maneira fácil de obter o índice selecionado de um RadioGroup no Android ou eu tenho que usar o OnCheckedChangeListener para ouvir as alterações e ter algo que mantenha o último índice selecionado?

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

se um usuário selecionar option 3, quero obter o índice, 2.

John Boker
fonte

Respostas:

479

Você deve conseguir fazer algo assim:

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

Se o RadioGroupcontiver outras Views (como a TextView), o indexOfChild()método retornará um índice incorreto.

Para obter o RadioButtontexto selecionado no RadioGroup:

 RadioButton r = (RadioButton) radioButtonGroup.getChildAt(idx);
 String selectedtext = r.getText().toString();
BP.
fonte
11
Mas e se esses botões não tiverem seus android:idatributos definidos?
neuront
@BP Tenho a mesma dúvida ao acessar os botões de opção quando nenhum dos pais ou o ID dos botões de opção está definido.
Killer
2
@neuront Desde que você faça radioGroup.findViewById (radioButtonID), ele funcionará. RadioGroup faz conjunto 1, 2, 3, 4, e assim por diante como IDs de vista, por isso, se você procurá-los dentro de seu contexto, ele vai trabalhar
Reinherd
Isso não funcionará se o RadioButton padrão (e intocado pelo usuário) estiver definido.
Ninja Coding
2
@NinjaCoding Se você cometeu o mesmo erro que eu, defina o botão de opção padrão (inicial) chamando radioGroup.check (selectedRadioButton.id), não radioButton.setChecked (true).
Lensflare
108

Isso deve funcionar,

int index = myRadioGroup.indexOfChild(findViewById(myRadioGroup.getCheckedRadioButtonId()));
source.rar
fonte
5
Use getActivity (). FindViewById () se você estiver usando no fragmento.
Sanjeet A
56

Você pode ter uma referência ao grupo de rádio e usar getCheckedRadioButtonId ()para obter o ID do botão de opção verificado. Dê uma olhada aqui

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

Então, quando você precisar obter a opção de rádio selecionada.

int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
if (checkedRadioButtonId == -1) {
    // No item selected
}
else{
    if (checkedRadioButtonId == R.id.radio_button1) {
        // Do something with the button
    }
}
Stefan Bossbaly
fonte
Sim, esse é o ID do botão de opção marcado, mas e o índice do botão de opção no grupo de opções?
precisa
posso obter o id, quero o índice, eles são diferentes.
precisa
o que você quer dizer com índice? está em uma exibição de lista?
Stefan Bossbaly
se eu tiver 5 botões de opção no grupo de rádio e o usuário selecionar o terceiro, eu quero obter 2, o índice do botão de opção selecionado no grupo de rádio. Esta não é uma lista.
precisa
apenas para esclarecer se o usuário seleciona o terceiro botão que você deseja obter o segundo? grupos e botões de rádio não possuem índices.
Stefan Bossbaly
27

tente isso

        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
fonte
Isso é obras! Mas não consigo entender por que precisamos usar esse "radioButton" View ..
AlexS
9

Você pode usar:

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

// use para obter o ID do item selecionado

int selectedID = myRadioGroup.getCheckedRadioButtonId();

// obtém a visualização do item selecionado

View selectedView = (View)findViewById( selectedID);
Jhoe-mar Pagao
fonte
6

Funcionou perfeitamente para mim desta maneira:

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

Tudo que você precisa é definir valores primeiro para o seu RadioButton, por exemplo:

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

e sempre que esse radioButton for escolhido, você poderá extrair seu valor pelo ID fornecido com

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

Felicidades!

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

basta usar isso:

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

você pode fazer

findViewById

do grupo de rádio.

Aqui está uma amostra:

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

Você pode simplesmente

-declarar o grupo de opções e um botão de opção fora do método onCreate

private RadioGroup GrupName;
private RadioButton NameButton;

-configure o ID da visualização no método onCreate

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

- pegue o id do botão de opção selecionado usando

int id = GroupName.getCheckedRadioButtonId();

-utilize o ID para corresponder à visualização selecionada por botões

NameButton = (RadioButton) findViewById(id);

-finalmente obtém o valor do botão de opção

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

--- PS: SE VOCÊ QUER UM VALOR INT, ENTÃO PODE LIGAR

int valueExpectedIn = Integer.parseInt(valueExpected);
Andrea Gurioli
fonte
1

Aqui está uma extensão Kotlin para obter a posição correta, mesmo que seu grupo contenha um TextView ou qualquer outro que não seja 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
fonte
0

Kotlin:

val selectedIndex = radioButtonGroup?.indexOfChild(
  radioButtonGroup?.findViewById(
    radioButtonGroup.getCheckedRadioButtonId())
)
Anand Kumar
fonte
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
fonte