- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
所以我正在尝试制作一个应用程序,您可以在其中从 radioGroup
中的 radioButton
中选择一个答案,当您点击提交按钮时,它将更改 textbox
说“正确”或“错误答案”,这取决于选择的是哪个按钮。我能够运行应用程序并选择 radioButton
,但是当我单击提交时,应用程序崩溃并显示“不幸的是,MyApp 已停止”。
这是我的代码:
XML
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/question1"
android:id="@+id/q1radiobox">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/q1a1"
android:id="@+id/q1a1" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/q1a2"
android:id="@+id/q1a2"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/q1a3"
android:id="@+id/q1a3"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/q1a4"
android:id="@+id/q1a4"/>
</RadioGroup>
<Button
android:onClick="checkResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/q1radiobox"
android:text="Submit"/>
Java
private void checkResult() {
RadioButton rb;
rb = (RadioButton) findViewById(R.id.q1a3);
if (rb.isChecked()) {
((TextView) findViewById(R.id.answer1)).setText("@string/correct");
}
else {
((TextView) findViewById(R.id.answer1)).setText("@string/incorrect");
}
}
任何帮助将不胜感激;我不知道哪里出了问题!
编辑:我已经发布了解决方案。感谢@miselking 指出其中一个问题。
最佳答案
好的,那么您需要知道的是,当您使用 android:onClick="checkResult"
定义点击事件的方式时,您的 checkResult
方法需要将 View
作为参数,只有这样它才能响应 onClick 事件。因此,将您的方法更改为如下所示:
private void checkResult(View v) {
RadioButton rb;
rb = (RadioButton) findViewById(R.id.q1a3);
if (rb.isChecked()) {
((TextView) findViewById(R.id.answer1)).setText("@string/correct");
}
else {
((TextView) findViewById(R.id.answer1)).setText("@string/incorrect");
}
编辑:您得到的是警告,而不是错误。您收到该警告是因为您没有在方法中的任何地方使用参数 v
。你可以忽略它,如果你有多个按钮调用同一个方法,它很有用,那么你需要知道哪个按钮实际调用了该方法。
假设您有两个按钮,其 ID 分别为 btnId1
和 btnId2
。它们在 xml 文件中都有这行代码:android:onClick="checkResult"
,所以它们都调用相同的方法(你可以这样做)。那么,当您单击这两个按钮中的任何一个时,哪个按钮实际调用了该方法?嗯,这就是为什么 View v
是必需的。然后,您将能够看到实际单击了哪个按钮并做出了适当的响应。 checkResult
的实现示例:
public void checkResult(View view)
{
Log.d("TAG_BTN", "Someone called me. But who???");
switch (view.getId())
{
case R.id.btnId1:
Log.d("TAG_BTN", "BtnId1 called me. Do something, please...");
break;
case R.id.btnId2:
Log.d("TAG_BTN", "BtnId2 called me. What next to do...");
break;
}
}
希望您了解为什么需要 View
参数。
关于java - 安卓工作室 : Using radioButtons for a quiz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30140081/
我是一名优秀的程序员,十分优秀!