Eu tenho um trecho de código com três RadioButton
s dentro de um RadioGroup
. Quero definir um onCheckedListener
que mostrará o valor de RadioButton
em a Toast
. No entanto, o que consegui até agora não está funcionando. Como faço para obter o valor de RadioButton
e exibi-lo em um Toast
? Este é o meu código:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;
public class MainActivity extends Activity {
RadioGroup rg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
final String value =
((RadioButton)findViewById(rg.getCheckedRadioButtonId()))
.getText().toString();
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
Toast.makeText(getBaseContext(), value, Toast.LENGTH_SHORT).show();
}
});
}
}
Arquivo XML:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="152dp" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Choose 1" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Choose 2" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Choose 3" />
</RadioGroup>
</RelativeLayout>
No caso, se você quiser fazer algum trabalho na seleção de um dos botões de rádio (sem ter nenhum botão OK adicional ou algo assim), seu código está bom, pouco atualizado.
fonte
fonte
Para qualquer pessoa que esteja preenchendo programaticamente e procurando obter um índice, você pode notar que o CHECKId muda conforme você retorna à atividade / fragmento e adiciona novamente esses botões de opção. Uma maneira de contornar isso é definir uma tag com o índice:
Então, em seu ouvinte:
fonte
Espero que funcione. Você pode converter sua saída em string da maneira acima.
gender.getCheckedRadioButtonId();
- gênero é o id do RadioGroup.fonte
fonte
basta usar a função getCheckedRadioButtonId () para determinar se alguma coisa está marcada, se -1 for o retorno, você pode evitar que o brinde apareça
fonte
fonte
RadioGroup em XML
activity_main.xml
MainActivity.java
fonte
Muito obrigado a Chris.
Esta é a minha solução:
fonte
Tive problemas para obter ids de botões de rádio também quando os RadioButtons são gerados dinamicamente. Parece não funcionar se você tentar definir manualmente o ID usando
RadioButton.setId()
. O que funcionou para mim foi usarView.getChildAt()
eView.getParent()
para iterar os botões de opção e determinar qual deles foi verificado. Tudo que você precisa é primeiro obter o RadioGroup viafindViewById(R.id.myRadioGroup)
e, em seguida, iterar por meio de seus filhos. Você saberá conforme itera em qual botão está e pode simplesmente usarRadioButton.isChecked()
para determinar se esse é o botão que foi marcado.fonte