user2794306
user2794306

Reputation: 175

how to delay put on button click android

public class MainActivity extends Activity implements NetworkMonitorListener {
    double _mylat = 0;
    double _mylong = 0;
    TextView textView1;

    Button clcikbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView1 = (TextView) findViewById(R.id.textView1);

        clcikbutton = (Button) findViewById(R.id.button1);

        clcikbutton.setEnabled(false);

        Timer buttonTimer = new Timer();
        buttonTimer.schedule(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        clcikbutton.setEnabled(true);
                    }
                });
            }
        }, 5000));

        clcikbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                        "MM/dd/yyyy hh:mm:ss aa");
                simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
                textView1.setText(DateFormat.getDateTimeInstance().format(
                        new java.util.Date("11/7/2014 5:19:11 AM UTC")));

            }
        });

    }
}

this is my code for delay on button click.I am trying to implement that when i click on the button and after that it should disable for 5 seconds and then it should work.Please help me where i am doing wrong because there is Error coming .

Upvotes: 5

Views: 9048

Answers (6)

Jim
Jim

Reputation: 1147

This is how you do it in Kotlin:

lifecycleScope.launch {
  buttonTimer.isEnabled = false
  delay(400) // debounce effect
  buttonTimer.isEnabled = true
}

Upvotes: 1

Hareshkumar Chhelana
Hareshkumar Chhelana

Reputation: 24848

Try to use Handler to disable button for given time :

clcikbutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa");
       simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
       textView1.setText(DateFormat.getDateTimeInstance().format(new java.util.Date("11/7/2014 5:19:11 AM UTC")));
       clcikbutton.setEnabled(false);
       new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                clcikbutton.setEnabled(true);        
            }
        },5000);
    }
});

Upvotes: 9

Hadi Satrio
Hadi Satrio

Reputation: 4292

Timer is flaky, consider using Handler's postDelay() method. Try this:

clcikbutton = (Button) findViewById(R.id.button1);

clcikbutton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // Do what you need to do..
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                    "MM/dd/yyyy hh:mm:ss aa");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
            textView1.setText(DateFormat.getDateTimeInstance().format(
                    new java.util.Date("11/7/2014 5:19:11 AM UTC")));

            // Set the button not-clickable..
            clcikbutton.setEnabled(false);

            // Then re-enable it after 5 seconds..
            final Runnable enableButton = new Runnable() {
                @Override
                public void run() {
                    clcikbutton.setEnabled(true);
                }
            };

            new Handler().postDelayed(enableButton, 5000);
        }
});

Those code should get you what you want: It will make the button clickable at first, then disable it for 5 seconds the time you click it.

Hope this helped. :)

Upvotes: 0

SweetWisher ツ
SweetWisher ツ

Reputation: 7306

You can use Handler to execute the line of code after some delay :

 clickbutton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // Do something after 5s = 5000ms
                    clickbutton.setEnabled(true);
                }
            }, 5000);

        }
    });

Hope it will help you ツ

Upvotes: 0

W I Z A R D
W I Z A R D

Reputation: 1224

There are two closing bracket after 5000 please check that.

Try like adding Some period 1000.

Timer buttonTimer = new Timer();
            buttonTimer.schedule(new TimerTask() {

                @Override
                public void run() {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            clcikbutton.setEnabled(true);
                        }
                    });
                }
            }, 5000, 1000);

Upvotes: 0

Droid Chris
Droid Chris

Reputation: 3773

why not this:

    clcikbutton = (Button) findViewById(R.id.button1);
    clcikbutton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            clcikbutton.setEnabled(false);

            Timer buttonTimer = new Timer();
            buttonTimer.schedule(new TimerTask() {

                 @Override
                 public void run() {
                      clcikbutton.setEnabled(true);
                 }
            }, 5000));

       }
 });

Upvotes: 0

Related Questions