android 在对话框上无法运行浏览器视图平滑滚动

gupuwyp2  于 2023-11-15  发布在  Android
关注(0)|答案(1)|浏览(118)

我的申请流程:
存储器片段:

  • 使用条形码扫描仪输入条形码
  • 如果之前已扫描条形码,则平滑滚动至现有条形码,并显示对话框模式以编辑数量。
  • 当用户在对话框模式中编辑数量后按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
}
}

字符串

watbbzwu

watbbzwu1#

您使用延迟发布来更新回收器,并使用延迟发布来更新视图。如果视图(currentbarcode)是由延迟发布到您的回收器设置或更新的,那么延迟发布到当前视图的结果将是未定义的。但是,根据您最初的问题无法判断。
第一步应该是删除currentbarcode的延迟发布,并让自动滚动工作。
当它工作时,您应该将您的调用移动到更新currentbarcode中,以将lambda传递给回收器的延迟post。

相关问题