kotlin 如何禁用一个按钮的多次点击?

pkbketx9  于 2023-08-06  发布在  Kotlin
关注(0)|答案(2)|浏览(140)

我有一个按钮,当点击显示一个对话框。但是当你多次快速点击按钮时,屏幕上会显示2个或更多的对话框。取决于在显示对话框之前单击按钮的次数。所以我必须多次关闭每个对话框...
我已经使用了 * dialog.isShowing *,但是当你多次快速点击按钮时,它似乎会忽略它。
...所以我想在对话框关闭时单击按钮。

private var mFlag = false

    fun myButton(view : View) {
        var tempDialog = AlertDialog.Builder(this).create()

        if (!mFlag) {
            myDialog.show()
            mFlag = true
        }

        if(dialog.isShowing){
           mFlag = false
        }
    }

字符串

np8igboo

np8igboo1#

我已经公开了避免双击视图问题的方法。
请检查此方法,

/***
 * To prevent from double clicking the row item and so prevents overlapping fragment.
 * **/
public static void avoidDoubleClicks(final View view) {
    final long DELAY_IN_MS = 900;
    if (!view.isClickable()) {
        return;
    }
    view.setClickable(false);
    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            view.setClickable(true);
        }
    }, DELAY_IN_MS);
}

字符串
可以通过以下方式使用该方法,

buttonTest.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(String clickedText) {
                                                       Utils.avoidDoubleClicks(alertViewHolder.tv_alert);

    // Rest code here for onlick listener 

});


或者另一种方式是,

private long lastClickTime = 0;

View.OnClickListener buttonHandler = new View.OnClickListener() {
    public void onClick(View v) {
        // preventing double, using threshold of 1000 ms
        if (SystemClock.elapsedRealtime() - lastClickTime < 1000){
            return;
        }

        lastClickTime = SystemClock.elapsedRealtime();
    }
}

fcwjkofz

fcwjkofz2#

Kotlin(可调延迟):

class OnSingleClickListener(private val delay: Long) : View.OnClickListener {

  private var lastClickTime = 0L

  override fun onClick(view: View) {
      val currentTime = System.currentTimeMillis()
      if (currentTime - lastClickTime < delay) { return }
      lastClickTime = currentTime
    }
  }

  fun View.setOnSingleClickListener(delay: Long = 500L) {
      setOnClickListener(OnSingleClickListener(delay))
  }

字符串
here

相关问题