У меня есть фрагмент кода с тремя RadioButton
с внутри RadioGroup
. Я хочу установить, onCheckedListener
который будет показывать значение RadioButton
в Toast
. Однако то, что я получил до сих пор, не работает. Как мне получить значение RadioButton
и отобразить его в Toast
? Это мой код:
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();
}
});
}
}
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>
В случае, если вы хотите поработать с выбором одной из радиокнопок (без дополнительной кнопки ОК или чего-то еще), ваш код в порядке, мало обновлен.
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId){ case R.id.radio0: // do operations specific to this selection break; case R.id.radio1: // do operations specific to this selection break; case R.id.radio2: // do operations specific to this selection break; } } }); } }
источник
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { radioButton = (RadioButton) findViewById(checkedId); Toast.makeText(getBaseContext(), radioButton.getText(), Toast.LENGTH_SHORT).show(); } } );
источник
Для тех, кто заполняет программно и хочет получить индекс, вы можете заметить, что checkId изменяется, когда вы возвращаетесь к активности / фрагменту и повторно добавляете эти переключатели. Один из способов обойти это - установить тег с индексом:
for(int i = 0; i < myNames.length; i++) { rB = new RadioButton(getContext()); rB.setText(myNames[i]); rB.setTag(i); myRadioGroup.addView(rB,i); }
Затем в вашем слушателе:
myRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) group.findViewById(checkedId); int mySelectedIndex = (int) radioButton.getTag(); } });
источник
int genid=gender.getCheckedRadioButtonId(); RadioButton radioButton = (RadioButton) findViewById(genid); String gender=radioButton.getText().toString();
Надеюсь, это сработает. Вы можете преобразовать вывод в строку указанным выше способом.
gender.getCheckedRadioButtonId();
- пол - идентификатор RadioGroup.источник
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { RadioButton radioButton = (RadioButton)group.findViewById(checkedId); } });
источник
просто используйте функцию getCheckedRadioButtonId (), чтобы определить, проверено ли что-либо, если -1 возвращается, вы можете избежать появления тостов
источник
Radiogroup rgteam; String team; rgteam.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { RadioButton rb= (RadioButton) findViewById(checkedId); team = rb.getText().toString(); } });
источник
RadioGroup в XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Java"/> </RadioGroup> </RelativeLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="150dp" android:layout_marginLeft="100dp" android:textSize="18dp" android:text="Select Your Course" android:textStyle="bold" android:id="@+id/txtView"/> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/rdGroup" android:layout_below="@+id/txtView"> <RadioButton android:id="@+id/rdbJava" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_marginLeft="100dp" android:text="Java" android:onClick="onRadioButtonClicked"/> <RadioButton android:id="@+id/rdbPython" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_marginLeft="100dp" android:text="Python" android:onClick="onRadioButtonClicked"/> <RadioButton android:id="@+id/rdbAndroid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_marginLeft="100dp" android:text="Android" android:onClick="onRadioButtonClicked"/> <RadioButton android:id="@+id/rdbAngular" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_marginLeft="100dp" android:text="AngularJS" android:onClick="onRadioButtonClicked"/> </RadioGroup> <Button android:id="@+id/getBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_below="@+id/rdGroup" android:text="Get Course" /> </RelativeLayout>
MainActivity.java
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RadioButton; import android.widget.Toast; public class MainActivity extends AppCompatActivity { RadioButton android, java, angular, python; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); android = (RadioButton)findViewById(R.id.rdbAndroid); angular = (RadioButton)findViewById(R.id.rdbAngular); java = (RadioButton)findViewById(R.id.rdbJava); python = (RadioButton)findViewById(R.id.rdbPython); Button btn = (Button)findViewById(R.id.getBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String result = "Selected Course: "; result+= (android.isChecked())?"Android":(angular.isChecked())?"AngularJS":(java.isChecked())?"Java":(python.isChecked())?"Python":""; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); } public void onRadioButtonClicked(View view) { boolean checked = ((RadioButton) view).isChecked(); String str=""; // Check which radio button was clicked switch(view.getId()) { case R.id.rdbAndroid: if(checked) str = "Android Selected"; break; case R.id.rdbAngular: if(checked) str = "AngularJS Selected"; break; case R.id.rdbJava: if(checked) str = "Java Selected"; break; case R.id.rdbPython: if(checked) str = "Python Selected"; break; } Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show(); } }
источник
Большое спасибо Крису.
Это мое решение:
RadioGroup radgroup_opcionesEventos = null; private static String[] arrayEventos = { "Congestión", "Derrumbe", "Accidente" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); radgroup_opcionesEventos = (RadioGroup)findViewById(R.id.rg_opciones_evento); int i=0;//a.new.ln for(String evento : arrayEventos) { //RadioButton nuevoRadio = crearRadioButton(evento);//a.old.ln RadioButton nuevoRadio = crearRadioButton(evento,i);//a.new.ln radgroup_opcionesEventos.addView(nuevoRadio,i); } RadioButton primerRadio = (RadioButton) radgroup_opcionesEventos.getChildAt(0); primerRadio.setChecked(true); } private RadioButton crearRadioButton(String evento, int n) { //RadioButton nuevoRadio = new RadioButton(this);//a.old.ln RadioButton nuevoRadio = new RadioButton(getApplicationContext());//a.new.ln LinearLayout.LayoutParams params = new RadioGroup.LayoutParams( RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); nuevoRadio.setLayoutParams(params); nuevoRadio.setText(evento); nuevoRadio.setTag(evento); return nuevoRadio; } @Override protected void onResume() { radgroup_opcionesEventos.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) group.findViewById(checkedId); //int mySelectedIndex = (int) radioButton.getTag(); String mySelectedIndex = radioButton.getTag().toString(); } }); super.onResume(); }
источник
У меня были проблемы с получением идентификаторов переключателей, когда RadioButtons динамически генерируются. Кажется, это не сработает, если вы попытаетесь вручную установить идентификатор using
RadioButton.setId()
. Что сработало для меня, так это использоватьView.getChildAt()
иView.getParent()
перебирать переключатели и определять, какой из них был отмечен. Все, что вам нужно, это сначала получить RadioGroup через,findViewById(R.id.myRadioGroup)
а затем перебрать его дочерние элементы . Вы будете знать, когда будете перебирать кнопку, на которой находитесь, и можете просто использовать ее,RadioButton.isChecked()
чтобы определить, была ли отмечена эта кнопка.источник