Ankush
Ankush

Reputation: 6927

delay onClick event in android

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?

Upvotes: 2

Views: 6323

Answers (4)

oguzhan
oguzhan

Reputation: 2179

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

Upvotes: 1

Ahmet
Ahmet

Reputation: 51

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
    }

Upvotes: 4

Shakeeb Ayaz
Shakeeb Ayaz

Reputation: 6096

button1.setOnClickListener(new OnClickListener() {

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


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

    } 
};

Upvotes: 1

Aaron
Aaron

Reputation: 699

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

    }
});

Upvotes: 5

Related Questions