Android不会更新UI线程上的按钮背景颜色

时间:2016-04-24 09:16:20

标签: android multithreading button android-runonuithread

我正在开发一款应用,并尝试点击更新按钮背景颜色。我想做的是,

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

2 个答案:

答案 0 :(得分:0)

btnOne.setBackgroundColor(#00b0ff);

会做到这一点;)

答案 1 :(得分:0)

我发现了这个错误,它没有用,因为我没有把它变成绿色。所以它只是不改变为不同的颜色。谢谢大家的帮助。 :d