问题描述
我在使用过滤器方法过滤条形码扫描器结果时遇到问题。我需要在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 (将#修改为@)