我的申请流程:
存储器片段:
- 使用条形码扫描仪输入条形码
- 如果之前已扫描条形码,则平滑滚动至现有条形码,并显示对话框模式以编辑数量。
- 当用户在对话框模式中编辑数量后按Enter键时,关闭对话框并滚动平滑至最后位置。<--此步骤中发生错误。它仅关闭对话框,而不是自动滚动至最后位置。
这是关于Qty edittext的代码:
class ModalQtyOnKeyListener(
private val dialog: Dialog,
private val QtyTextToEdit: EditText,
private val QtyModal: EditText,
private var oldQty: Any,
private val currentBarcodeText: EditText,
val recyclerView: RecyclerView,
private val mContacts: MutableList<BarcodeList>) : View.OnKeyListener {
init{
oldQty = try {
oldQty.toString().toInt()
} catch (e: NumberFormatException) {
1
}
}
override fun onKey(v: View, keyCode: Int, event: KeyEvent): Boolean {
if (event.action == KeyEvent.ACTION_UP) {
return if (keyCode == 66) {
var newQty = 0
var barcode = ""
if(QtyModal.text.length >= 12)
{
val pattern = Pattern.compile("([0-9]+)?([a-zA-Z]{3}[0-9]+)")
val matcher = pattern.matcher(QtyModal.text.toString())
if (matcher.find()) {
val qty = if (matcher.group(1)!= null) matcher.group(1) else QtyModal.text.toString()
barcode = if (matcher.group(2)!= null) matcher.group(2) else ""
newQty = QtyTextToEdit.text.toString().toInt() + qty.toString().toInt()
}
} else
{
newQty = QtyModal.text.toString().toInt() + QtyTextToEdit.text.toString().toInt()
barcode = QtyModal.text.toString()
}
QtyTextToEdit.setText(newQty.toString())
// from this line where the code is not working
recyclerView.postDelayed({
// Call smooth scroll
// FYI: I already debug mContacts.size return correct position
recyclerView.layoutManager.scrollToPosition(mContacts.size)
}, 100)
// FYI: current barcode and recyclerview not in modal dialog but in the fragment.
currentBarcodeText.postDelayed({
currentBarcodeText.requestFocus()
currentBarcodeText.setText("")
if(barcode.length==12)
{
currentBarcodeText.setText(barcode)
currentBarcodeText.setSelection(barcode.length)
currentBarcodeText.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER))
currentBarcodeText.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER))
}
}, 130)
// until this line where the code is not working
dialog.hide()
dialog.dismiss()
true
} else false
}
return false
}
}
字符串
1条答案
按热度按时间watbbzwu1#
您使用延迟发布来更新回收器,并使用延迟发布来更新视图。如果视图(
currentbarcode
)是由延迟发布到您的回收器设置或更新的,那么延迟发布到当前视图的结果将是未定义的。但是,根据您最初的问题无法判断。第一步应该是删除
currentbarcode
的延迟发布,并让自动滚动工作。当它工作时,您应该将您的调用移动到更新
currentbarcode
中,以将lambda传递给回收器的延迟post。