Ich habe einen Code mit drei RadioButton
s innerhalb eines RadioGroup
. Ich möchte ein setzen onCheckedListener
, das den Wert von RadioButton
in a anzeigt Toast
. Was ich bisher bekommen habe, funktioniert jedoch nicht. Wie erhalte ich den Wert von RadioButton
und zeige ihn in einem an Toast
? Das ist mein Code:
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-Datei:
<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>
Falls Sie einen Job bei der Auswahl eines der Optionsfelder ausführen möchten (ohne zusätzliche OK-Schaltfläche oder ähnliches), ist Ihr Code in Ordnung und wird nur wenig aktualisiert.
quelle
quelle
Wenn Sie programmgesteuert auffüllen und nach einem Index suchen, stellen Sie möglicherweise fest, dass sich die überprüfte ID ändert, wenn Sie zur Aktivität / zum Fragment zurückkehren und diese Optionsfelder erneut hinzufügen. Eine Möglichkeit, dies zu umgehen, besteht darin, ein Tag mit dem Index festzulegen:
Dann in Ihrem Hörer:
quelle
Hoffe das funktioniert. Sie können Ihre Ausgabe auf die oben beschriebene Weise in einen String konvertieren.
gender.getCheckedRadioButtonId();
- Geschlecht ist die ID von RadioGroup.quelle
quelle
Verwenden Sie einfach die Funktion getCheckedRadioButtonId (), um festzustellen, ob etwas überprüft wird. Wenn -1 zurückgegeben wird, können Sie verhindern, dass Toast angezeigt wird
quelle
quelle
RadioGroup in XML
activity_main.xml
MainActivity.java
quelle
Vielen Dank an Chris.
Das ist meine Lösung:
quelle
Ich hatte auch Probleme beim Abrufen von Optionsfeldern, wenn die RadioButtons dynamisch generiert werden. Es scheint nicht zu funktionieren, wenn Sie versuchen, die IDs manuell festzulegen
RadioButton.setId()
. Was für mich funktionierte, war, die Optionsfelder zu verwendenView.getChildAt()
undView.getParent()
zu durchlaufen, um festzustellen, welche aktiviert waren. Alles, was Sie brauchen, ist, zuerst die RadioGroup über zu bekommenfindViewById(R.id.myRadioGroup)
und dann durch ihre Kinder zu iterieren. Sie wissen, während Sie durchlaufen, auf welcher Schaltfläche Sie sich befinden, und können einfach verwenden,RadioButton.isChecked()
um festzustellen, ob dies die Schaltfläche ist, die aktiviert wurde.quelle