我有一个带有 EditText 和几个按钮的片段。
其中一个按钮允许用户使用 GmsBarcodeScanning 库扫描条形码。
如果成功,扫描的条形码应该出现在 EditText 中,但我无法让它工作。
问题似乎是在 onSuccessListener() 之后执行 onCreateView() ,因此所有组件都被重置。
我认为这一定很简单,但我花了几个小时却找不到解决方案。
SelecComanda 类:Fragment() {
private var et_codi: EditText? = null
private var btn_scan: Button? = null
private var btn_next: Button? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.selec_comanda, container, false)
et_codi = root.findViewById(R.id.editTextCodi)
btn_scan = root.findViewById(R.id.boto_scan)
btn_next = root.findViewById(R.id.button_second)
return root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn_next!!.isEnabled = false
btn_next!!.setOnClickListener {
// TODO
}
btn_scan!!.setOnClickListener {
val options = GmsBarcodeScannerOptions.Builder()
.enableAutoZoom()
.build()
val scanner = GmsBarcodeScanning.getClient(this.context!!, options)
scanner.startScan()
.addOnSuccessListener { barcode ->
et_codi!!.setText(barcode.rawValue.toString())
btn_next!!.setEnabled(true)
}
.addOnCanceledListener {
// TODO
}
.addOnFailureListener { e ->
// TODO
}
}
}
}
如何恢复扫描的条形码并放入EditText?
你可以尝试下面的代码吗
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val gmsScannerOptions = configureScannerOption()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val instance = getBarcodeScannerInstance(gmsScannerOptions)
btn_scan!!.setOnClickListener {
initiateScanner(instance)
}
}
private fun configureScannerOption(): GmsBarcodeScannerOptions {
return GmsBarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_AZTEC
)
.build()
}
private fun getBarcodeScannerInstance(gmsBarcodeScannerOptions: GmsBarcodeScannerOptions): GmsBarcodeScanner {
return GmsBarcodeScanning.getClient(this, gmsBarcodeScannerOptions)
// Or with a configured options
// val scanner = GmsBarcodeScanning.getClient(this, options)
}
private fun initiateScanner(gmsBarcodeScanner: GmsBarcodeScanner) {
gmsBarcodeScanner.startScan()
.addOnSuccessListener { barcode ->
// Task completed successfully
val result = barcode.rawValue
Log.d(TAG, "initiateScanner: $result")
when (barcode.valueType) {
Barcode.TYPE_URL -> {
Log.d(TAG, "initiateScanner: ${barcode.valueType}")
}
else -> {
Log.d(TAG, "initiateScanner: ${barcode.valueType}")
}
}
Log.d(TAG, "initiateScanner: Display value ${barcode.displayValue}")
Log.d(TAG, "initiateScanner: Display value ${barcode.format}")
}
.addOnCanceledListener {
// Task canceled
}
.addOnFailureListener { e ->
// Task failed with an exception
}
}