recyclerview无法请求关注第6个位置的最后一个项目

时间:2018-02-13 08:34:16

标签: android android-recyclerview recycler-adapter

我有放养的回收视图,当用户在Qty edittext(右边)上点击“输入”时,它会添加新项目并专注于条形码编辑文本(左边的)但奇怪的是它只能工作90%而有时会在某些条件(我不知道)它无法将焦点设置为最新的条形码编辑文本。

屏幕截图,显示请求重点关注最新项目:

enter image description here

,失败者:

enter image description here

我尝试调试logcat中显示false的数据,这意味着它不应该集中在那里

enter image description here

这是我的脚本onBindViewHolder

override fun onBindViewHolder(viewHolder: RecyclerViewBarcodeAdapter.ViewHolder, position: Int) {
    // Get the data model based on position
    val contact = mContacts[position]
    Log.d("dfocus", contact.isFocus.toString() + " = " + contact.barcode)

    viewHolder.positionTextWatcher.updatePosition(position)
    viewHolder.barcodeEditText.setText(contact.barcode)


    if (contact.isFocus)
    {
        viewHolder.barcodeEditText.requestFocus()
    }

    contact.isFocus = false

}

我如何解决这个问题?我需要确保它专注于正确的地方,因为收银员需要快速而不看他们的电话。

这是我添加新项目的方式:

模型:

fun add(barcode: String, qty: Int): ArrayList<BarcodeList>
    {
        for (i in 0 until barcodeList.count())
        {
            barcodeList[i].isFocus = false
        }

        val contactModel = BarcodeList(barcode, qty)
        contactModel.isFocus = true
        barcodeList.add(contactModel)

        return barcodeList
    }

onkeylistener:

barcodeList = BarcodeList.add("20", 10)
                adapter = RecyclerViewBarcodeAdapter(mContext, recyclerView, barcodeList)
                val curSize = adapter.itemCount
                adapter.notifyItemInserted(curSize-1)

1 个答案:

答案 0 :(得分:-1)

似乎问题是因为我尝试在编辑文本准备好之前设置焦点。所以为了解决这个问题,我在onBindViewHolder

中请求焦点之前放了延迟
override fun onBindViewHolder(viewHolder: RecyclerViewBarcodeAdapter.ViewHolder, position: Int) {
....
val contact = mContacts[position]
if (contact.isFocus)
    {
        viewHolder.barcodeEditText.postDelayed({
            viewHolder.barcodeEditText.requestFocus()
        }, 300)
    }
....
}