Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮

Posted

技术标签:

【中文标题】Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮【英文标题】:Android: How to check/uncheck a RadioButton inside a RadioGroup programmatically in Java 【发布时间】: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);

     

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

提前致谢!

【问题讨论】:

【参考方案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包含一个数字!

以上是关于Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?

如何在android中以编程方式启用位置访问?

在android中以编程方式覆盖文本到语音设置中的“始终使用我的设置”选项

如何在 Android 10 中以编程方式安装任何 Android 应用

如何在Android中以编程方式打开MIUI系统Activity

如何在 Android 中以编程方式创建 TabLayout