2

我当前的代码如下所示:

        button1.setOnClickListener(new OnClickListener() {

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

但是,我希望在单击页面后和onClick执行方法之前有 1 秒的延迟。我怎样才能做到这一点?

4

4 回答 4

5

为什么不尝试在 OnClick 方法本身中添加延迟?您必须使用处理程序并在其上调用 postDelayed 方法:

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

    }
});
于 2013-07-31T03:18:53.247 回答
3

在科特林;

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

并在 onClick 函数中使用此扩展

 override fun onClick(v: View) {
        v.disableClickTemporarily()
        //...your code
    }
于 2019-08-21T12:31:16.473 回答
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() {

    } 
};
于 2013-07-31T03:18:28.100 回答
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)
    }

}

然后你可以像下面这样使用它:

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

或者您可以在实施过程中设置延迟毫秒,如下所示:

clickableView.setOnClickListener(DelayedClickListener(delayMillis = 1000) { view ->
    //do what you want here
})
于 2019-08-21T08:35:21.160 回答