craig-nerd
craig-nerd

Reputation: 748

Disable button when clicked, then re-enable it

I am starting out Android development by building a simple quiz app with only two buttons, True and False. The app displays a Toast saying whether the answer is correct or incorrect.
What I am trying to do is disable both the buttons as soon as either is clicked/tapped, then re-enable them after the Toast has been displayed. This is what I tried in my listener for the buttons:

mFalseButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v){
            mTrueButton.setEnabled(false);
            mFalseButton.setEnabled(false);

            checkAnswer(false); //Display the appropriate Toast

            mTrueButton.setEnabled(true);
            mFalseButton.setEnabled(true);
        }
    });

This does not work. My buttons never get disabled when they are clicked/tapped. How can I do this correctly? Any help would be highly appreciated.

Upvotes: 5

Views: 2301

Answers (5)

AskNilesh
AskNilesh

Reputation: 69734

try this

mFalseButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mTrueButton.setEnabled(false);
        mFalseButton.setEnabled(false);

        checkAnswer(false); //Display the appropriate Toast


        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
            // This method will be executed once the timer is over
                mTrueButton.setEnabled(true);
                mFalseButton.setEnabled(true);

            }
        },2000);// set time as per your requirement in millisecinds
    }
});

Upvotes: 1

Zeeshan Sardar
Zeeshan Sardar

Reputation: 235

private static final ScheduledExecutorService worker =
            Executors.newSingleThreadScheduledExecutor();


  checkAnswer(false);
  Runnable task = new Runnable() {
            public void run() {
        mTrueButton.setEnabled(true);
        mFalseButton.setEnabled(true);
  mFalseButton.setEnabled(true);
            }
        };
        worker.schedule(task, 3000, TimeUnit.MILLISECONDS);

Upvotes: 1

6155031
6155031

Reputation: 4337

Use

mTrueButton.setClickable(false);

instead of

mTrueButton.setEnable(false);

Upvotes: 4

Ojas Chimane
Ojas Chimane

Reputation: 104

Try this

mTrueButton.setVisibility(View.INVISIBLE);

mTrueButton.setVisibility(View.VISIBLE);

Upvotes: 1

Ajil O.
Ajil O.

Reputation: 6892

Enable with a Handler like this after 1500 ms.

mTrueButton.setEnabled(false);
mFalseButton.setEnabled(false);

checkAnswer(false); //Display the appropriate Toast

new Handler().postDelayed(new Runnable() {
  @Override
  public void run() {
      mTrueButton.setEnabled(true);
      mFalseButton.setEnabled(true);
  }
}, 1500);

Upvotes: 6

Related Questions