关于 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输入监听如何判断输入结束的主要内容,如果未能解决你的问题,请参考以下文章

关于 EditText输入监听如何判断输入结束

android EditText控件中, 如何判断并且限制只能输入数字?

Android EditText 监听器输入

关于 ScrollView 中嵌套 EditText,输入多行会使整体滚动的问题

Android开发之EditText 详解(addTextChangedListener监听用户输入状态)

Android手机输入法按键监听-dispatchKeyEvent