2017-10-19 109 views
0

按下button2('dontKnowAnswer')后,我想禁止button1('knowAnswerButton')执行任何操作,直到setCurrentCard();从内部runOnUiThread被称为我做了全局布尔状态,这样做的工作,但它看起来像这个问题的真正丑陋的解决方案是否有任何模式如何做到这一点?在按下另一个按钮时暂停onClickListener

 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。在此点击侦听器中创建静态标志并在您自定义的侦听器类中进行管理。

相关问题