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 中使用了 onPause
和 onResume
方法。这样我在settingsActivity中做的事情,在切换到MainActivity再回来后,都会保存下来。
settingsActivity:
这里我有一个TextView
(称为“settings2”)作为一种变量,我的三个RadioButtons
(radio0
、radio1
和radio2
)在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 10 中以编程方式安装任何 Android 应用