Ich bin programmatisch hinzufügen RadioButtons
zu einem bereits bestehenden aber leer RadioGroup
mit dem folgenden Code.Seltsames Verhalten von programmgesteuert erstellt RadioGroup
RadioGroup currencySettingRadioGroup = (RadioGroup) currency_settings_dialog.findViewById(R.id.rg_currency_symbol);
currencySettingRadioGroup.removeAllViews();
RadioButton rb_none = new RadioButton(this);
// Add the 'None' option at the start
rb_none.setText("None");
if (v_currency_symbol.equals("")) rb_none.setChecked(true);
currencySettingRadioGroup.addView(rb_none,0);
String[] currency_symbols_options_array = getResources().getStringArray(R.array.currency_symbols);
for (int i=0; i < currency_symbols_options_array.length; i++) {
RadioButton rb = new RadioButton(this);
rb.setText(currency_symbols_options_array[i]);
if (v_currency_symbol.equals(currency_symbols_options_array[i].substring(0,1))) rb.setChecked(true);
currencySettingRadioGroup.addView(rb,i+1);
}
Das Layout XML ist wie folgt:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/currency_settings_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="12dp"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingTop="24dp">
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/currency_symbol"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.DialogWindowTitle" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/currency_symbol_explanation" />
<RadioGroup
android:id="@+id/rg_currency_symbol"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:id="@+id/settings_close_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:elevation="0dp"
android:gravity="end|center_vertical"
android:text="@string/close_currency_settings"
android:textColor="#008dcd" />
</LinearLayout>
Die RadioGroup
wird richtig gebaut und die RadioButton
mit dem Text, den meine v_currency_symbol
erste Zeichen der Variablen übereinstimmt, wird wie erwartet geprüft.
Allerdings ist keines der anderen RadioButton
s klicken nicht dazu führen, die geprüfte Option zu deaktivieren - ich mit zwei Optionen geprüft enden.
Ein Klick und jede der anderen Optionen Überprüfung bewirkt, dass die zweite aufgegebene Position zu deaktivieren, aber die ersten RadioButton
kontrolliert bleibt.
Es ist fast, als ob die RadioButton
, die programmatisch zu einem separaten Radiogroup, gehört überprüft wird.
Entfernen der zwei Zeilen, die eine der RadioButton
s bei der Erstellung überprüfen, ermöglicht die RadioGroup
ordnungsgemäß funktioniert, aber Sie können natürlich nicht sehen, die vorherige Auswahl.
Sie Ihren Code debuggen müssen wissen, wo das Problem kommen aus ?, BTW die 'None' Radioknopf eine der radiogroup sein sollte, warum Sie es getrennt **' Sie zwei radio button an die selbe radioGroup hinzugefügt, was bedeutet, dass du zwei checked buttons haben wirst. ** – Ibrahim
Alles scheint korrekt zu funktionieren, außer dem steckengebliebenen Knopf. 'onClick'-Ereignisse auf den' RadioButtons' werden korrekt ausgelöst usw., um den 'v_currency_symbol'-Wert korrekt zu setzen, und wenn der Dialog geschlossen und wieder geöffnet wird, wird der korrekte me-Wert als markiert angezeigt, aber dann bleibt dieser fest. Und die 'None' Option ist innerhalb der' RadioGroup' und wird nicht von dem Array erzeugt, das von der for-Schleife gelesen wird. –