关于 EditText输入监听如何判断输入结束
Posted 清风伴佳人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 EditText输入监听如何判断输入结束相关的知识,希望对你有一定的参考价值。
EditText setOnKeyListener和addTextChangedListener中判断输入已经结束
今天在项目中使用二维码反扫的时候,发现在EditText字符是逐个键入的,这就导致在处理业务逻辑的时候,会出现问题,于是自己写了一个工具类,来实现监听输入是否结束。
话不多说直接安排代码
这个是工具类
/**
* @property listener InputListener 数据返回的监听事件
*/
class CheckInputFinish constructor(val listener: InputListener)
lateinit var scope:CoroutineScope //声明一个携程
private var isStart = false //用于判断循环是否结束
private lateinit var list: MutableList<String> //用于存放字节的list
private var listLength = 0 //list的字节长度
private var count = 0 //长度相等的次数
fun checkResult(string: String)
//判断线程是否已经启动
if (!isStart)
scope= CoroutineScope(Dispatchers.Main)
list = mutableListOf() //初始化list
list.add(string) //将字节添加到list
scope.launch //启动线程
isStart = true //更新变量
while (isStart) //开启循环
delay(30) //线程休眠30ms
if (listLength != list[list.size-1].length) //判断输入的文本长度和list中的最后键入的长度是否相等
listLength = list[list.size-1].length //如不想等 就赋予长度
else
count++ //如果相等开始计数
if (count == 5) //当计数达到5次 结束循环并返回数据 重置变量
count=0
isStart = false
scope.cancel()
listener.returnResult(list[list.size - 1]) //返回数据
else
list.add(string) //添加数据
这个是工具类用到的接口
interface InputListener
fun returnResult(string: String)
下面说一下实现的思路,其实很简单就是在文本逐个字节返回的时候,将返回的字节放到list中,和每一次输入的作比较。当输入的变量和list中最后一个变量相比较5次都相等时,认为输入已经终止。
下面看一下调用方式,很简单
lateinit var checkInputFinish: CheckInputFinish
//初始化时传入接口用作回调
checkInputFinish= CheckInputFinish(object : InputListener
override fun returnResult(string: String)
LogUtils.logDebugMsg("测试结果", string)
)
//传入值
binding.ed.setOnKeyListener _, _, _ ->
LogUtils.logDebugMsg("扫描结果", binding.ed.text.toString())
checkInputFinish.checkResult(binding.ed.text.toString())
false
最后看一下输出的日志
以上是关于关于 EditText输入监听如何判断输入结束的主要内容,如果未能解决你的问题,请参考以下文章
android EditText控件中, 如何判断并且限制只能输入数字?
关于 ScrollView 中嵌套 EditText,输入多行会使整体滚动的问题