Tengo un fragmento de código con tres RadioButton
s dentro de a RadioGroup
. Quiero establecer un onCheckedListener
que muestre el valor de RadioButton
en a Toast
. Sin embargo, lo que he conseguido hasta ahora no funciona. ¿Cómo obtengo el valor de RadioButton
y lo muestro en un Toast
? Este es mi codigo:
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();
}
});
}
}
Archivo 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>
En caso de que desee hacer algún trabajo en la selección de uno de los botones de opción (sin tener ningún botón OK adicional o algo así), su código está bien, actualizado poco.
fuente
fuente
Para cualquiera que esté poblando programáticamente y busque obtener un índice, puede notar que el CheckId cambia cuando regresa a la actividad / fragmento y vuelve a agregar esos botones de opción. Una forma de evitarlo es establecer una etiqueta con el índice:
Luego en tu oyente:
fuente
Espero que esto funcione. Puede convertir su salida a cadena de la manera anterior.
gender.getCheckedRadioButtonId();
- el género es la identificación de RadioGroup.fuente
fuente
simplemente use la función getCheckedRadioButtonId () para determinar si hay algo marcado, si -1 es return, puede evitar que aparezca el brindis
fuente
fuente
RadioGroup en XML
activity_main.xml
MainActivity.java
fuente
Muchas gracias a Chris.
Esta es mi solucion:
fuente
También he tenido problemas para obtener la identificación de los botones de radio cuando los botones de radio se generan dinámicamente. No parece funcionar si intenta configurar manualmente el uso de ID
RadioButton.setId()
. Lo que funcionó para mí fue usarView.getChildAt()
yView.getParent()
para iterar a través de los botones de opción y determinar cuál estaba marcado. Todo lo que necesita es obtener primero el RadioGroup víafindViewById(R.id.myRadioGroup)
y luego iterar a través de sus hijos. Sabrá a medida que recorre en qué botón se encuentra, y puede usarloRadioButton.isChecked()
para determinar si ese es el botón que se marcó.fuente