【问题标题】:Android: How to check/uncheck a RadioButton inside a RadioGroup programmatically in JavaAndroid:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮
【发布时间】:2014-03-06 21:51:13
【问题描述】:

我要Activity,MainActivity和settingsActivity。因此,我在 settingsActivity 中使用了 onPauseonResume 方法。这样我在settingsActivity中做的事情,在切换到MainActivity再回来后,都会保存下来。

settingsActivity:

这里我有一个TextView(称为“settings2”)作为一种变量,我的三个RadioButtonsradio0radio1radio2)在RadioGroup 内。 切换到 MainActivity 后,如果最后检查了 radio0,我的程序会将“0”放入文件(保存在 sdcard 上)。但是,如果最后一次检查了 radio1,它会将 1 放入该文件中。如果最后检查了radio2,它会将 2 放入该文件中。 我在方法onPause中使用了这个。

然后在onResume 方法中,我读取了该文件的文本并将其放入TextView“settings2”中。 在此代码之后(仍在onResume)我想检查/取消选中我的RadioButtons。因此,如果 TextView "settings2" 的文本为 "0",则应检查 RadioButton "radio0" 而其他则不检查。如果此TextView 的文本为“1”,则应检查RadioButton "radio1" 而其他不检查。如果此TextView 的文本为“2”,则应检查RadioButton "radio2" 而其他则不检查。 为此,我使用了以下两个代码,但不幸的是它们不起作用。

第一个代码:

if (settings2.getText().equals("0")) {

        radio0.setChecked(true);
        radio1.setChecked(false);
        radio2.setChecked(false);

    } else if (settings2.getText().equals("1")) {

        radio0.setChecked(false);
        radio1.setChecked(true);
        radio2.setChecked(false);

    } else if (settings2.getText().equals("2")) {

        radio0.setChecked(false);
        radio1.setChecked(false);
        radio2.setChecked(true);

    } 

第二个代码:

if (settings2.getText().equals("0")) {

        radioGroup1.check(R.id.radio0);

    } else if (settings2.getText().equals("1")) {

        radioGroup1.check(R.id.radio1);

    } else if (settings2.getText().equals("2")) {

        radioGroup1.check(R.id.radio2);

    } 

有人可以帮忙解决这个小问题吗?我期待您的帮助!

提前致谢!

【问题讨论】:

    标签: java android radio-button radio-group


    【解决方案1】:

    这就是问题所在。

     EditText et = ....
     et.getText() // Does not return a string, it returns an Editable.
    

    试试:

    String str = et.getText().toString;
    

    然后使用 str 进行比较。

    编辑:请参阅下面的源代码,了解为什么您必须使用字符串进行比较。默认是通过引用进行比较,但是字符串已经覆盖了 equals 以根据字符串值进行比较。如果您不使用字符串,您将无法获得匹配项。

    public boolean More ...equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
                return true;
            }
        }
        return false;
    }
    

    【讨论】:

    • 我实际上不使用EditText,而是使用TextView。使用TextView时是否有同样的问题?无论如何,我尝试了它并没有奏效。 settingsActivity 现在崩溃了。 Eclipse 还告诉我像这样使用它:String str = settings2.getText().toString(); 我还将它与“==”进行了比较。也许那是错误的,我应该使用“equals()”?
    • 不管怎样,把它放在一个字符串中。只有 String 覆盖了 equals 来比较字符串值,getText 的所有其他返回类型都比较引用。其次,与equals比较。您总是比较字符串是否与等号匹配。如果您使用“==”,您是在询问它们是否在内存中占据相同的位置。
    • 感谢您对何时使用“==”和“equals()”进行了很好的解释!
    【解决方案2】:

    您确定 TextView 文本是 0、1 还是 2?对于这样的设置,您应该查看SharedPreferences!它更容易使用,也更快。

    你应该做的第二件事是,而不是得到你应该做的settings2.getText().toString ()

    int input = Integer.parseInt (settings2.getText().toString()

    然后使用

    switch(input) {
        case 0:
            // code when text equals 0
        break;
        case 1:
            // code when text equals 1
        break;
        case 2:
            // code when text equals 2
        break;
    }
    

    调查一下。 .我现在在手机上

    编辑:格式化文本以获得更好的视图。

    编辑 2:SharedPreferences 示例

    //get your app's Preference Manager
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); // If you are coding this in your Activity class, you have to use getDefaultSharedPreferences(this) instead!
    
    public int getPrefs(String key) {
        //get an Integer from the preferences
        return prefs.getInt(key, defaultValue);
        //defaultValue is in case a value for the given key is not found, for example, the user runs the app for the 1st time.
    }
    
    public void setPrefs() {
        //You need a SharedPreference editor
        SharedPreferences.Editor prefsEditor = prefs.edit();
        //SharedPreference work with a key and its value
        prefsEditor.putInt(key, value);
        //You have to commit the preferences, or they don't get saved!
        //If you want to use a save button, you can make the Editor variable into a Global var (class variable) and in your save button's onClick, just commit!
        prefsEditor.commit();
    }
    

    【讨论】:

    • 这个解决方案也有效。只要他把它放在基于价值观而不是(只是)参考来评估平等的东西中,它就有机会发挥作用。字符串和整数都这样做。
    • 我之前使用 sharedPreferences 尝试过,但没有得到它。所以,我对 android 上的 java 比较陌生,我想问你是否可以给我看一个带有 RadioButtons 的示例脚本?这将有助于我很好地理解您的解决方案的使用!当然,我首先尝试使用它,但得到了以下信息:The method parseInt(String) in the type Integer is not applicable for the arguments (CharSequence)。在这种情况下,这意味着什么?
    • 错误是我的错误settings2.getText()返回一个CharSequence变量,但我们需要的是一个String,所以我们必须把CharSequence变成一个String,这样我们可以通过添加.toString()(例如:settings2.getText().toString()
    • 如果您不赶时间,我想推荐 2 个播放列表来观看!我就是这样学习的。搜索“TheNewBoston 的 Android 教程”和“slideNerd 的 Android 教程”。 (我不确定我是否可以发布外部链接,所以我不会,但你可以在 google/youtube 上搜索它们)
    • 在您了解更多信息之前,您可以像其他答案一样继续使用str.equals(...)。如果你使用我的方式,你必须确保settings包含一个数字!
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2012-09-14
    • 2021-06-30
    • 2017-11-05
    • 2018-08-11
    • 2018-07-15
    • 2012-04-30
    • 2016-02-10
    相关资源
    最近更新 更多