因此,我正在尝试制作一个应用,您可以在radioButton
内选择radioGroup
的答案,当您点击提交按钮时,它会更改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"/>
爪哇
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指出其中一个问题。答案 0 :(得分:2)
好的,那么您需要知道的是,当您使用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
参数。
答案 1 :(得分:0)
所有这些麻烦之后,我发现问题如下:
private void checkResult()
需要
public void checkResult(View view)
感谢@miselking指出缺少一个视图,并且在玩这个方法的时候,我发现纯粹的运气会导致公共/私人空白。