2016-04-24 89 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。這就像我一直試圖讓它固定三天,我沒有注意到這個最愚蠢的錯誤。 :( –