我正在开发一个应用程序,并尝试使用点击更新按钮背景颜色。我想要做的是,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