我正在開發一個應用程序,並嘗試使用點擊更新按鈕背景顏色。我想要做的是,Android不會更新UI上的按鈕背景顏色線程
1)等待0.5秒檢查答案是否正確。如果答案正確,將按鈕顏色更改爲綠色,否則將其更改爲紅色。
2)按鈕顏色變化後再等待0.5秒,然後調用函數更新問題。
這裏是我的onClick方法,
@Override
public void onClick(View v) {
if(totalQuestionsAsked <= 10){
if(score >= 10)
score = 10;
//Setting up button and image
final Button btnOne = (Button)findViewById(R.id.btn_one);
final Button btnTwo = (Button)findViewById(R.id.btn_two);
final Button btnThree = (Button)findViewById(R.id.btn_three);
final Button btnFour = (Button)findViewById(R.id.btn_four);
final ImageView flagImg = (ImageView)findViewById(R.id.flag_img);
final JSONArray country = getFilesArray()[0];
final JSONArray flag = getFilesArray()[1];
final View view = v;
switch (v.getId()){
case R.id.btn_one:
btnOne.setBackgroundColor(Color.parseColor("#00b0ff"));
break;
case R.id.btn_two:
btnTwo.setBackgroundColor(Color.parseColor("#00b0ff"));
break;
case R.id.btn_three:
btnThree.setBackgroundColor(Color.parseColor("#00b0ff"));
break;
case R.id.btn_four:
btnFour.setBackgroundColor(Color.parseColor("#00b0ff"));
break;
}
final Handler handler = new Handler();
final Runnable runnerTwo = new Runnable() {
@Override
public void run() {
if(totalQuestionsAsked <= 10){
createCountryElements(flag, country, btnOne, btnTwo, btnThree, btnFour, flagImg);
}else{
Toast.makeText(MainActivity.this, "Your total score is: " + String.valueOf(score),
Toast.LENGTH_LONG).show();
}
}
};
Runnable runnerOne = new Runnable() {
@Override
public void run() {
if(view.getTag().equals(flagImg.getTag())){
score++;
switch (view.getId()){
case R.id.btn_one:
setButtonGreen(R.id.btn_one);
break;
case R.id.btn_two:
setButtonGreen(R.id.btn_two);
break;
case R.id.btn_three:
setButtonGreen(R.id.btn_three);
break;
case R.id.btn_four:
setButtonGreen(R.id.btn_four);
break;
}
}else{
switch (view.getId()){
case R.id.btn_one:
setButtonRed(R.id.btn_one);
break;
case R.id.btn_two:
setButtonRed(R.id.btn_two);
break;
case R.id.btn_three:
setButtonRed(R.id.btn_three);
break;
case R.id.btn_four:
setButtonRed(R.id.btn_four);
break;
}
}
totalQuestionsAsked++;
handler.postDelayed(runnerTwo, 1000);
}
};
handler.postDelayed(runnerOne, 500);
}
}
所以它只是不改變按鈕的背景顏色。其他一切正常。誰能告訴我我的錯誤在哪裏?
謝謝你幫助我。 :d
通過快速查看代碼,我可以看出什麼可以改變UI線程中的顏色。所以你可以在'runOnUIThread {}'塊 –
@ReazMurshed中移動顏色變化代碼,所以首先我要做的是改變所選按鈕的顏色。比我想等待0.5秒,以檢查選定的按鈕是否正確,並根據該更改顏色。而不是0.5秒後,更新問題。這就是我想要做的。 –
交換機中的情況從不被調用。因爲View view = v是截取OnClickEvent的視圖。您在切換循環中提供的按鈕沒有OnClickListener。我不知道你是否理解我的意思。 – ErenisR