2015-05-09 71 views
3

因此,我試圖製作一個應用程序,在radioGroup之內從radioButton中選擇一個答案,當您點擊Submit按鈕時,它會將textbox更改爲「正確」或「錯誤的答案」,取決於選擇哪個按鈕。我可以運行應用程序,並選擇radioButton,但是當我點擊提交時,應用程序崩潰並說「不幸的是,MyApp已經停止」。Android Studio:使用radioButtons進行測驗

這是我的代碼:

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指出其中一個問題。

+1

在您的日誌貓上發佈錯誤消息。 – dsharew

+0

我還沒有看到它。 – dsharew

+0

對不起,所有待編輯的想要將「XML」更改爲小寫。 – Matt

回答

0

所以,畢竟這個麻煩的,我已經發現問題如下:

private void checkResult() 

需要進行

public void checkResult(View view) 

謝謝@miselking您指出缺乏的查看,當我玩弄這個方法的時候,我發現純粹運氣的公共/私人空間。

+0

沒問題,對不起,我花了一段時間在編輯中寫一個解釋,希望它可以幫助... – miselking

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 btnId1btnId2。他們都在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參數。

+0

我已經試過這個,它沒有區別。當我將鼠標懸停在代碼的「View v」部分上時,它說「參數'v'從不使用」。 – Matt

+0

感謝您的編輯,是的,已經清除了View的使用!很好解釋。 – Matt