2017-10-19 8 views
0

button2( 'dontKnowAnswer')を押した後、setCurrentCard();までボタン1( 'knowAnswerButton')を実行して何もしません。内部からrunOnUiThreadと呼ばれている私は仕事をしているグローバルブール状態を作ったが、それは本当にこの問題の醜い解決策のようにそれを行う方法のパターンはありますか?別のボタンを押しながらoneClickListenerを一時停止

 knowAnswerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (currentPosition > mTestDeck.size()){ 
        //TO DO 
        // END 
      } 
      if (state == true) { 
       mTestDeck.correctAnswer(); 
       currentPosition++; 
       setCurrentCard(); 
      } 
     } 
    }); 

    dontKnowAnswerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(currentPosition > mTestDeck.size()){ 
       //TO DO 
       // END 
      } 

      myTextView.setText(currentCard.getBack()); 
      currentPosition++; 
      state = false; 

      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        FlashCardActivity.this.runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          setCurrentCard(); 
          state = true; 
         } 
        }); 
       } 
      }, PAUSE_TIMER); 

     } 
    }); 
} 

答えて

0

knowAnswerButtonビューを有効/無効にするだけで、状態を保存するフラグを保持する必要はありません。これを行うには、button.setEnabled(boolean)メソッドを使用してください。

ボタンは有効ではありませんが(setEnabled(false))、ユーザーはそのボタンをクリックできないため、クリックイベントは発生しません。

dontKnowAnswerButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if(currentPosition > mTestDeck.size()){ 
      //TO DO 
      // END 
     } 

     myTextView.setText(currentCard.getBack()); 
     currentPosition++; 
     knowAnswerButton.setEnabled(false); 

     new Timer().schedule(new TimerTask() { 
      @Override 
      public void run() { 
       FlashCardActivity.this.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         setCurrentCard(); 
         knowAnswerButton.setEnabled(true); 
        } 
       }); 
      } 
     }, PAUSE_TIMER); 
    } 
}); 

knowAnswerButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (currentPosition > mTestDeck.size()){ 
       //TO DO 
       // END 
     } 
     mTestDeck.correctAnswer(); 
     currentPosition++; 
     setCurrentCard(); 
    } 
}); 
0

はい、単一エントリポイントパターンを使用できます。 OnClickListenerを実装する独自のStateClickListenerを作成します。このクリックリスナーに静的フラグを作成し、それをカスタムリスナークラスの内部で管理します。

関連する問題