2017-11-04 2 views
0

Ich habe ein Layout, das eine leere RadioGroup enthält. (Ich denke, das ist der Unterschied zwischen dieser Frage und andere, die gestellt wurden - ich bereits die leere Radiogroup in meinem Layout an der richtigen Stelle hat)Füllen Sie eine RadioGroup mit RadioButtons aus einem String-Array

Ich mag diese RadioGroup füllen mit dem item s von einem string-array das habe ich in strings.xml definiert.

Das Array in strings.xml sieht wie folgt aus:

<string-array name="currency_symbols"> 
    <item>$ - Dollar</item> 
    <item>€ - Euro</item> 
    <item>£ - Pound</item> 
    <item>¥ - Yen</item> 
    <item># - Other</item> 
</string-array> 

Ich versuche dann auf die RagioGroup mit teh nach einem RadioButton und fügen Sie es zu schaffen:

RadioGroup currencySettingRadioGroup = (RadioGroup) settings_dialog.findViewById(R.id.rg_currency_symbol); 
currencySettingRadioGroup.removeAllViews(); 

RadioButton rb = new RadioButton(this); 
String[] currency_symbols_options_array = getResources().getStringArray(R.array.currency_symbols); 
for (String this_currency_option: currency_symbols_options_array) { 
    rb.setText(this_currency_option); 
    currencySettingRadioGroup.addView(rb); 
} 

Der currencySettingRadioGroup.removeAllViews(); hinzugefügt wurde, weil ich bekomme den folgenden Fehler, aber es macht keinen Unterschied:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

Die Linie, die offenbar das Problem verursacht, ist die currencySettingRadioGroup.addView(rb); Linie ...

Wie mache ich das richtig?

(Ich habe bei Create RadioButton Dynamically with String Array sah und die http://android.okhelp.cz/create-radiobutton-radiogroup-dynamically-android-sample/ verwies aber kann nicht scheinen, etwas zu bekommen zu arbeiten)

+0

Sie müssen dieses Spiel setzen 'RadioButton- rb = new RadioButton- (this);' in Ihrer 'for' Schleife – Barns

+0

Nun, das es fest ist, aber ich kann nicht Finde heraus, warum ... indem du dies in die Schleife legst, ist eine neue Instanz des 'rb' Objektes, das auf jeder Schleife erzeugt wird, aber mit demselben Namen? –

+0

Wenn Sie diese Zeile außerhalb der Schleife haben, erstellen Sie nur eine Instanz eines RadioButtons. Und diese eine Instanz (ein eindeutiges Objekt) wurde der RadioGroup mehrmals hinzugefügt, wodurch ein Fehler erzeugt wurde. – Barns

Antwort

0

Per Barns52 Kommentar, ein neues RadioButton jedes Mal um den (eher for -loop zu schaffen als nur Einmal vor dem for -loop startet, löst dieses Problem.

Der Arbeitscode ist wie folgt:

RadioGroup currencySettingRadioGroup = (RadioGroup) settings_dialog.findViewById(R.id.rg_currency_symbol); 

String[] currency_symbols_options_array = getResources().getStringArray(R.array.currency_symbols); 
for (String this_currency_option: currency_symbols_options_array) { 
    RadioButton rb = new RadioButton(this); 
    rb.setText(this_currency_option); 
    currencySettingRadioGroup.addView(rb); 
} 
Verwandte Themen