2016-04-24 30 views
0

私はアプリを開発中で、クリック時にボタンの背景色を更新しようとしています。私がしたいことは、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

スイッチ内のケースは決して呼び出されません。ビュービュー= vは、OnClickEventをインターセプトするビューです。また、スイッチループで提供するボタンには、OnClickListenerがありません。あなたが私のことを理解しているかどうかわかりません。 – ErenisR

答えて

0
btnOne.setBackgroundColor(#00b0ff); 

は、トリックを行います。)

+0

動作しませんでした。私はまずそれを試みた。 –

+0

メソッドが呼び出されていますか?あなたは 'Log'を同時に印刷できますか? –

+0

私はあなたの与えられた答えと同じものに戻りました。何も起こっていない。私はそれが赤または緑に色を変更していないことを意味します –

0

私はグリーンにそれを変更しておりませんので、それが動作していない、間違いを発見しました。だから違う色に変化しないように働いています。私を助けてくれてありがとう。 :D

+0

アドバイスのビットは、タイプミス、コードの間違いの呼び出しのポートではありません。だから、何かがうまくいかないときは、「このコードはなぜ機能しないのですか」という質問を投稿するためにSOに逃げてはいけません。深呼吸、リラックス、少し離れてコンピュータから離れ、研究してください。 – t0mm13b

+0

私は@ t0mm13bを知っています。それは私が3日間それを固定しようとしているようなもので、私は邪悪な間違いに気付かなかった。 :( –