无法使用Filterable过滤条形码扫描器结果

问题描述

我在使用过滤器方法过滤条形码扫描器结果时遇到问题。我需要在EditText字段搜索中同时进行手动搜索和条形码搜索。手动扫瞄可以正常工作,当我扫描条形码时会出现问题,条形码编号出现在EditText字段内,但是它没有激活搜索方法

MainActivity中的过滤器代码

search!!.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(charSequence: CharSequence,i: Int,i1: Int,i2: Int) {}
            override fun onTextChanged(charSequence: CharSequence,i2: Int) {
                adapter!!.filter.filter(charSequence.toString())         
            }
            override fun afterTextChanged(editable: Editable) {}
        })

MainActivity的条形码扫描仪代码

    private var mScanManager: ScanManager? = null
    private var idbuf = intArrayOf(PropertyID.WEDGE_INTENT_ACTION_NAME,PropertyID.WEDGE_INTENT_DATA_STRING_TAG)
    private var actionValueBuf = arrayOf(ScanManager.ACTION_DECODE,ScanManager.BARCODE_STRING_TAG)
    private lateinit var mScanReceiver: broadcastReceiver


 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
mScanManager = ScanManager()
        try {
            mScanManager?.openScanner()
            actionValueBuf = mScanManager!!.getParameterString(idbuf)
        } catch (e: Exception) {
            Log.w("Barcode scanner","No barcod scanner found",e)
        }
}


 private fun Context.registerReceiver(
        intentFilter: IntentFilter,onReceive: (intent: Intent?) -> Unit
    ): broadcastReceiver {
        val receiver = object : broadcastReceiver() {
            override fun onReceive(context: Context,intent: Intent?) {
                onReceive(intent)
            }
        }
        this.registerReceiver(receiver,intentFilter)
        return receiver
    }

    override fun onResume() {
        super.onResume()
        val filter = IntentFilter()

        try {
            actionValueBuf = mScanManager!!.getParameterString(idbuf)
        } catch (e: Exception) {
            Log.w("Barcode scanner",e)
        }

        filter.addAction(actionValueBuf[0])
        mScanReceiver = registerReceiver(IntentFilter(filter)) { intent ->
            result = intent?.getStringExtra(actionValueBuf[1])
            if (result != null) {
                search?.text?.clear()
                search?.setText(result)
            }
        }
    }

    override fun onPause() {
        super.onPause()
        unregisterReceiver(mScanReceiver)
    }

我已经尝试过类似的方法,但是它不起作用

search!!.requestFocus()
        search!!.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(charSequence: CharSequence,i2: Int) {
               //result is barcode number
                if(result == null){
                    adapter!!.filter.filter(charSequence.toString())
                } else {
                    adapter!!.filter.filter((result))
                    resultLength= charSequence.toString()
                    search?.setSelection(resultLength.toString().length)
                }
            }

            override fun afterTextChanged(editable: Editable) {}
        })

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)