2012-12-24 164 views
0

我正在寫一個測驗應用程序,向用戶提供一個問題和4個選擇。當用戶點擊選擇時,應用程序應將正確選項的顏色更改爲綠色,將錯誤選擇的顏色更改爲紅色。在顯示下一個問題之前,它應該等待一秒鐘。Android:文本顏色不變

問題是它不會做顏色變化(除了最後一個問題),我不明白爲什麼。我知道我的android.os.SystemClock.sleep(1000)與它有關。

如果你能告訴我我哪裏出了問題,或者如果我正在討論這個不正確的方法,我將不勝感激。謝謝:)

public void onClick(View v) { 
    setButtonsEnabled(false); 
    int answer = Integer.parseInt(v.getTag().toString()); 
    int correct = question.getCorrectAnswer(); 

    if(answer == correct) 
     numCorrect++; 
    highlightAnswer(answer,correct,false); 
    android.os.SystemClock.sleep(1000); 

    MCQuestion next = getRandomQuestion(); 
    if(next != null) { 
     question = next; 
     highlightAnswer(answer,correct,true); 
     displayQuestion(); 
     setButtonsEnabled(true); 
    } 
    else { 
     float percentage = 100*(numCorrect/questionsList.size()); 
     QuizTimeApplication.setScore(percentage); 
     Intent scoreIntent = new Intent(QuestionActivity.this,ScoreActivity.class); 
     startActivity(scoreIntent); 
    } 
} 

private void setButtonsEnabled(boolean enable) { 
    for(Button b: buttons) 
     b.setEnabled(enable); 
} 

private void highlightAnswer(int answer, int correct, boolean undo) { 
    if(undo) { 
     for(Button button : buttons) { 
      button.setTextColor(getResources().getColor(R.color.white)); 
      button.setTextSize(FONT_SIZE_NORMAL); 
     } 
     return; 
    } 
    buttons[correct].setTextColor(getResources().getColor(R.color.green)); 
    buttons[correct].setTextSize(FONT_SIZE_BIG); 
    if(answer!=correct) { 
     buttons[answer].setTextColor(getResources().getColor(R.color.red)); 
     buttons[answer].setTextSize(FONT_SIZE_BIG); 
    } 
} 
+0

刪除調用highlightAnswer()後的所有代碼。刪除睡眠呼叫和if,else塊。如果您打算使用亮點,那麼問題出在睡眠命令上。線程在屏幕上放置更新之前休眠。 如果是這種情況,您將需要使用AsyncTask來執行等待和回調以顯示下一個問題。 – conor

回答

3
SystemClock.sleep(1000); 

會給意外的行爲,可能不適合您的要求的工作好。最好使用Handler,延遲時間如下所示。

Handler h = new Handler(); 
h.postDelayed(new Runnable(){ 

@Override 
public void run() 
{ 
//your code that has to be run after a delay of time. in your case the code after SystemClock.sleep(1000); 
},YOUR_DELAY_IN_MILLISECONDS 
); 
+0

謝謝,這工作。 –