android - 仅当上次输入是 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
}
})
解决方案
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 Runnable
s,因此如果没有 set 的输入,则只有最后一个会触发delay
也不要忘记Runnable
在销毁Activity
/时关闭所有 set Fragment
(例如在onDestroy
/onDestroyView
方法中)
推荐阅读
- node.js - 为什么在 Windows 上通过 yarn 运行时,utf16 / 代理对表情符号无法在 console.log() 中正确显示?(直接npm和node都可以)
- sql-server - SQL Server 中的聚集索引:列在架构中的第一位有什么优势?
- android - Android布局是重叠元素
- wordpress - 如何从 Woocommerce 中的“我的帐户 > 订单”页面获取订单信息?$order->get_id() 与订单号不匹配
- angular - 引导轮播不工作在角度(10)
- javascript - 从嵌套数组中删除对象失败
- typeorm - 左连接和选择但不同
- javascript - 角材料不过滤选项
- elasticsearch - Elasticsearch - 使用字段匹配来提升而不是获取文档
- mongodb - 无法在 MongoDB GRAPHQL 查询中使用变量