【问题标题】:Radio Button inside radion group doesn't remains selected in AndroidRadion组内的单选按钮不会在Android中保持选中状态
【发布时间】:2015-01-04 06:58:54
【问题描述】:

我在一个单选组中有三个单选按钮。我基本上通过从 xml 文件中删除 set selected line 来取消选择所有单选按钮。现在,当用户选择任何按钮时,它只能工作一次,当它再次进入单选按钮选择窗口时,它在选择状态之前已经丢失了所有内容。我尝试了这么多语句,但没有成功。意味着我想要当用户检查任何按钮时,它将始终保持选中状态,直到用户不检查任何其他按钮。请帮我。下面是我的代码。

SelectedLanguage.java:

public class SelectLanguage extends ActionBarActivity {
    public static String lang;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select_language);

        RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup1);
        RadioButton gujarati = (RadioButton) findViewById(R.id.radio0);
        RadioButton hindi = (RadioButton) findViewById(R.id.radio1);
        RadioButton english = (RadioButton) findViewById(R.id.radio2);

        //int radio_selected = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE).getInt("my_selected_radio",0);
        //int radio_selected = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE).edit().putInt("my_selected_radio",selectedValue).commit();

        group.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                if(checkedId == R.id.radio0) {
                    lang = "Gujarati";

                } else if(checkedId == R.id.radio1) {
                    lang = "Hindi";

                } else {
                    lang = "English";

                }

            }

        });

    }

select_language.xml:

<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="25dp" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="RadioButton" />
    </RadioGroup>

【问题讨论】:

  • 当另一个活动(屏幕)启动时,前一个活动进入暂停状态,否则如果您完成();它,它被破坏了,所以简单的解决方案是将您选中的项目索引或字符串本地保存在 SharedPreference 中并在 OnCreate() 中检索它们并根据先前的用户选择设置复选框选择,这是您可以做到的最简单的方法

标签: android radio-button status radio-group


【解决方案1】:

这是满足您需求的完整答案,我已经尝试过了,而且效果很好。此代码将选中复选框的值存储在 sharedpreferences 中,并在需要时返回存储的值。

group.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // TODO Auto-generated method stub
        pref = getApplicationContext().getSharedPreferences("MyPref", 0);
        Editor editor1 = pref.edit();
        editor1.remove("key_name");
        if (checkedId == R.id.radio0) {
            lang = "Gujarati";
            pref = getApplicationContext().getSharedPreferences("MyPref", 0);
            Editor editor = pref.edit();
            editor.putString("key_name", lang);
            editor.commit();
            // chk = pref.getString("key_name", null);
            txtV.setText(lang);

        } else if (checkedId == R.id.radio1) {
            lang = "Hindi";
            pref = getApplicationContext().getSharedPreferences("MyPref", 0);
            Editor editor = pref.edit();
            editor.putString("key_name", lang);
            editor.commit();
            // chk = pref.getString("key_name", null);
            txtV.setText(lang);
        } else if (checkedId == R.id.radio2) {
            lang = "English";
            pref = getApplicationContext().getSharedPreferences("MyPref", 0);
            Editor editor = pref.edit();
            editor.putString("key_name", lang);
            editor.commit();
            // chk = pref.getString("key_name", null);
            txtV.setText(lang);

        }
    }

});

pref = getApplicationContext().getSharedPreferences("MyPref", 0);
chk = pref.getString("key_name", null);
System.err.println("Get value is=====" + chk);
if (chk != null) {
    if (chk.equals("Gujarati")) {
        gujarati.setChecked(true);
    }
    if (chk.equals("Hindi")) {
        hindi.setChecked(true);
    }
    if (chk.equals("English")) {
        english.setChecked(true);
    }
}

【讨论】:

    【解决方案2】:

    你能描述一下实际的流程吗?它是否涉及用户选择单选按钮,屏幕关闭,然后用户返回同一屏幕并且您希望将预先选择的单选按钮显示为选中状态?

    如果是这种情况,我相信您需要专门设置选中/选中的单选按钮,例如: ((RadioButton)radioGroup.getChildAt(INDEX)).setChecked(true);

    【讨论】:

    • 用户通过单击按钮进入选择窗口,然后用户选中任何复选框,但是当用户再次进入该选择屏幕时,所有复选框都处于未选中状态,如果用户再次启动应用程序关闭它然后它也会忘记有关已检查状态的所有内容。
    • 请您提供任何有关 SharedPreference 指南的链接。
    • 好的,正如我所提到的,框架不会重新检查用户在之前的选择或会话中选择的按钮。您需要做的是保存在应用程序的首选项或 SQLite DB 中选择的值(取决于值的性质) - 并在打开屏幕时 - 检查是否先前存储了值 - 并让您的代码选择该单选按钮与我在上面发布的 sn-p 类似。如果您需要有关在 Android 中保存数据的更多信息,您可能想从这里开始:developer.android.com/training/basics/data-storage/index.html
    • 更具体地说 - SharedPreferences:developer.android.com/training/basics/data-storage/…
    • 最后我使用 SharedPreferences 编写了完整的代码。谢谢。
    猜你喜欢
    • 2017-12-22
    • 2012-03-08
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多