首页 > 解决方案 > 仅当上次输入是 500 毫秒前,我如何才能发布消息?

问题描述

我有搜索视图。当用户键入它发布的内容时,它每 500 毫秒记录一次,但每个符号都会发生这种情况。如何仅在 500 毫秒前输入最后一个符号时才发布完整的字符串输入?

private val delay = 500L //ml
private val handler = Handler(Looper.getMainLooper())

binding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(text: String?): Boolean {
            return false
        }

        override fun onQueryTextChange(newText: String?): Boolean {
            val showLogRunnable = Runnable {
                Log.d("SEARCH", "Searching for: $newText")
            }
            handler.postDelayed(showLogRunnable, delay)

            return false
        }
    })

标签: androidkotlin

解决方案


Runnable在设置新设置之前关闭先前设置

    override fun onQueryTextChange(newText: String?): Boolean {
        handler.removeCallbacksAndMessages(null);
        val showLogRunnable = Runnable {
            Log.d("SEARCH", "Searching for: $newText")
        }
        handler.postDelayed(showLogRunnable, delay)
        return false
    }

removeCallbacksAndMessages将关闭所有先前的 set Runnables,因此如果没有 set 的输入,则只有最后一个会触发delay

也不要忘记Runnable在销毁Activity/时关闭所有 set Fragment(例如在onDestroy/onDestroyView方法中)


推荐阅读