Reputation: 6927
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
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
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
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
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