2017-10-19 8 views
0

Après avoir appuyé sur button2 ('dontKnowAnswer'), je veux interdire button1 ('knowAnswerButton') de faire n'importe quelle action jusqu'à setCurrentCard(); à partir de l'intérieur runOnUiThread est appelé j'ai fait l'état booléen global qui fait le travail mais il ressemble à une solution vraiment laide à ce problème est-il un modèle sur la façon de faire cela?Pause d'un onClickListener en appuyant sur un autre bouton

 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); 

     } 
    }); 
} 

Répondre

0

Activez/désactivez simplement knowAnswerButton, donc vous n'aurez pas besoin de garder un drapeau pour enregistrer l'état. Pour ce faire, utilisez simplement la méthode button.setEnabled(boolean).

Notez que si le bouton n'est pas activé (setEnabled (false)), l'utilisateur ne peut pas cliquer sur ce bouton, de sorte que l'événement click ne soit pas déclenché.

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

Oui, vous pouvez utiliser le modèle Point d'entrée unique. Créez votre propre StateClickListener qui implémentent OnClickListener. Créez un indicateur statique dans cet écouteur de clic et gérez-le dans votre classe d'écouteur personnalisé.