2

My current code looks like this:

        button1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                //blah
            }
        });

However, I want there to be delay of 1 second after I click on the page and before the onClick method is executed. How can I do this?

Ankush
  • 6,767
  • 8
  • 30
  • 42

4 Answers4

5

Why don't you try adding the delay in the OnClick method itself? You'll have to use a handler and call the postDelayed method on it:

button1.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {

                //Execute code here

            }
        }, 1000);

    }
});
Aaron
  • 699
  • 4
  • 14
4

in kotlin;

fun View.disableClickTemporarily(){
    isClickable = false
    postDelayed({
        isClickable = true
    },500)
}

and use this extension in onClick function

 override fun onClick(v: View) {
        v.disableClickTemporarily()
        //...your code
    }
Ahmet
  • 51
  • 7
1
button1.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
          Handler  myHandler = new Handler();
         myHandler.postDelayed(mMyRunnable, 1000);
        }
    });


 Runnable  mMyRunnable = new Runnable() {   
    public void run() {

    } 
};
Shakeeb Ayaz
  • 6,200
  • 6
  • 45
  • 64
1
class DelayedClickListener(private val delayMillis : Long = 500 , private val function: (view: View?) -> Unit) : View.OnClickListener {

    override fun onClick(v: View?) {
        v?.let { view ->
            view.isClickable = false
            Handler().postDelayed({ view.isClickable = true }, abs(delayMillis))
        }
        function.invoke(v)
    }

}

Then you can use it either like below:

clickableView.setOnClickListener(DelayedClickListener { view ->
   //do what you want here
})

or you can set delay millis during implementation like below:

clickableView.setOnClickListener(DelayedClickListener(delayMillis = 1000) { view ->
    //do what you want here
})
oguzhan
  • 2,073
  • 1
  • 26
  • 23