Ich arbeite an einer App und versuche, Button Hintergrundfarbe mit Klick zu aktualisieren. Was ich tun möchte ist,Android aktualisiert keine Schaltflächenhintergrundfarbe auf UI-Thread
1) Warten Sie 0,5 Sekunden, um zu überprüfen, ob die Antwort richtig ist oder nicht. Wenn die Antwort richtig ist, ändern Sie die Farbe der Schaltfläche in Grün, ändern Sie sie stattdessen in Rot.
2) Nach der Farbänderung der Taste warten Sie weitere 0,5 Sekunden und rufen dann eine Funktion auf, um die Frage zu aktualisieren.
Hier ist meine onClick Methode,
@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);
}
}
So ist es einfach nicht zu ändern Hintergrundfarbe der Schaltfläche. Alles andere funktioniert einwandfrei. Kann mir jemand sagen, wo ist mein Fehler?
Vielen Dank für Ihre Hilfe. : D
Was kann ich an einem kurzen Blick auf Ihren Code erkennen, wenn Sie die Farbe im UI-Thread ändern? Sie können also die Farbwechselcodes in 'runOnUIThread {}' Block –
@ReazMurshed verschieben. Zuerst ändere ich also die Farbe der ausgewählten Schaltfläche. Dann möchte ich für 0,5 Sekunden warten, um zu überprüfen, ob die gewählte Taste richtig war oder nicht, und die Farbe entsprechend ändern. Und dann nach 0,5 Sekunden die Frage aktualisieren. Das möchte ich tun. –
Die Fälle im Switch werden nie aufgerufen. Weil die Ansichtsansicht = v die Ansicht ist, die das OnClickEvent abfängt. Und die Schaltflächen, die Sie in der Umschaltschleife bereitstellen, haben keinen OnClickListener. Ich weiß nicht, ob du verstanden hast, was ich meine. – ErenisR