Strange behaviour of programatically created RadioGroup

别等时光非礼了梦想. 提交于 2019-12-25 11:58:12

问题


I am programatically adding RadioButtons to a pre-existing but empty RadioGroup with the following code.

        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);
        }

The layout XML is as follows:

<?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>

The RadioGroup gets built correctly and the RadioButton with the text that matches my v_currency_symbol variable's first character is checked as expected.

However, clicking any of the other RadioButtons does not cause the checked option to uncheck - I end up with two options checked.

Clicking and checking any of the other options causes the second checked position to uncheck, but the first RadioButtonremains checked.

It is almost as though the RadioButton that is checked programatically belongs to a seperate RadioGroup.

Removing the two lines that check one of the RadioButtons on creation allows the RadioGroup to function properly, but you obviously cannot then see the previous selection.


回答1:


I found the issue... checking the RadioButton before adding it to the RadioGroup causes the problem.

Swapping the two relevant lines resolves the issue. The working code is as follows:

    // Add the 'None' option at the start
    rb_none.setText("None");
    currencySettingRadioGroup.addView(rb_none,0);
    if (v_currency_symbol.equals("")) rb_none.setChecked(true);


    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]);
        currencySettingRadioGroup.addView(rb,i+1);
        if (v_currency_symbol.equals(currency_symbols_options_array[i].substring(0,1))) rb.setChecked(true);
    }


来源:https://stackoverflow.com/questions/47122143/strange-behaviour-of-programatically-created-radiogroup

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!