按下另一个按钮时暂停一个onClickListener

时间:2017-10-19 10:11:09

标签: java android onclicklistener

按下button2('dontKnowAnswer')后我想禁止button1('knowAnswerButton')做任何动作,直到setCurrentCard();从内部runOnUiThread被称为我已经做了全局布尔状态,它完成了这项工作,但看起来这个问题真的很丑陋的解决方案是否有任何模式如何做到这一点?

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

        }
    });
}

2 个答案:

答案 0 :(得分:0)

是的,您可以使用模式单一入口点。创建自己的实现OnClickListener的StateClickListener。在此单击侦听器中创建静态标志,并在自定义侦听器类中对其进行管理。

答案 1 :(得分:0)

只需启用/禁用 knowAnswerButton 视图,这样您就不需要保留一个标志来保存状态。为此,只需使用button.setEnabled(boolean)方法。

请注意,虽然未启用按钮(setEnabled(false)),但用户无法单击该按钮,因此不会触发click事件。

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