2016-04-24 88 views
0

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

+0

通过快速查看代码,我可以看出什么可以改变UI线程中的颜色。所以你可以在'runOnUIThread {}'块 –

+0

@ReazMurshed中移动颜色变化代码,所以首先我要做的是改变所选按钮的颜色。比我想等待0.5秒,以检查选定的按钮是否正确,并根据该更改颜色。而不是0.5秒后,更新问题。这就是我想要做的。 –

+0

交换机中的情况从不被调用。因为View view = v是截取OnClickEvent的视图。您在切换循环中提供的按钮没有OnClickListener。我不知道你是否理解我的意思。 – ErenisR

回答

0
btnOne.setBackgroundColor(#00b0ff); 

会做的伎俩;)

+0

它没有工作。我先试了一下。 –

+0

你确定调用该方法吗?你能同时打印一个“日志”吗? –

+0

我改回你给定的答案和相同的东西。什么都没有发生。我的意思是它不会改变颜色为红色或绿色 –

0

我发现了错误,它不工作,因为我不是将其更改为绿色。所以它的工作原理就是不改变颜色。谢谢大家帮助我。 :D

+0

位咨询,SO不是拼写错误,代码错误的端口。所以,当某些事情不起作用时,不要跑到SO发布问题“为什么此代码无法工作”。深呼吸,放松,离开计算机一会儿,研究它。 – t0mm13b

+0

我知道@ t0mm13b。这就像我一直试图让它固定三天,我没有注意到这个最愚蠢的错误。 :( –