Saya memiliki sepotong kode dengan tiga RadioButton
s dalam a RadioGroup
. Saya ingin menyetel onCheckedListener
yang akan menunjukkan nilai RadioButton
dalam a Toast
. Namun apa yang saya dapatkan sejauh ini tidak berhasil. Bagaimana cara mendapatkan nilai RadioButton
dan menampilkannya di a Toast
? Ini kode saya:
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();
}
});
}
}
File 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>
Dalam kasus, jika Anda ingin melakukan beberapa pekerjaan pada pemilihan salah satu tombol radio (tanpa tombol OK tambahan atau sesuatu), kode Anda baik-baik saja, sedikit diperbarui.
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; } } }); } }
sumber
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(); } } );
sumber
Bagi siapa pun yang mengisi secara terprogram dan ingin mendapatkan indeks, Anda mungkin memperhatikan bahwa checkId berubah saat Anda kembali ke aktivitas / fragmen dan Anda menambahkan kembali tombol radio tersebut. Salah satu cara untuk menyiasatinya adalah dengan menyetel tag dengan indeks:
for(int i = 0; i < myNames.length; i++) { rB = new RadioButton(getContext()); rB.setText(myNames[i]); rB.setTag(i); myRadioGroup.addView(rB,i); }
Kemudian di pendengar Anda:
myRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton radioButton = (RadioButton) group.findViewById(checkedId); int mySelectedIndex = (int) radioButton.getTag(); } });
sumber
int genid=gender.getCheckedRadioButtonId(); RadioButton radioButton = (RadioButton) findViewById(genid); String gender=radioButton.getText().toString();
Semoga ini berhasil. Anda dapat mengubah output Anda menjadi string dengan cara di atas.
gender.getCheckedRadioButtonId();
- gender adalah id RadioGroup.sumber
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { RadioButton radioButton = (RadioButton)group.findViewById(checkedId); } });
sumber
cukup gunakan fungsi getCheckedRadioButtonId () untuk menentukan apakah ada yang dicentang, jika -1 dikembalikan, Anda dapat menghindari toast muncul
sumber
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(); } });
sumber
RadioGroup dalam 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(); } }
sumber
Terima kasih banyak untuk Chris.
Ini solusi saya:
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(); }
sumber
Saya juga mengalami masalah dalam mendapatkan id tombol radio saat RadioButtons dibuat secara dinamis. Tampaknya tidak berhasil jika Anda mencoba mengatur ID secara manual menggunakan
RadioButton.setId()
. Apa yang berhasil bagi saya adalah menggunakanView.getChildAt()
danView.getParent()
untuk beralih melalui tombol radio dan menentukan mana yang diperiksa. Yang Anda butuhkan adalah terlebih dahulu mendapatkan RadioGroup melaluifindViewById(R.id.myRadioGroup)
dan kemudian beralih melalui anak-anaknya. Anda akan tahu saat Anda beralih melalui tombol mana Anda berada, dan Anda dapat langsung menggunakanRadioButton.isChecked()
untuk menentukan apakah itu tombol yang dicentang.sumber