我有放养的回收视图,当用户在Qty edittext(右边)上点击“输入”时,它会添加新项目并专注于条形码编辑文本(左边的)但奇怪的是它只能工作90%而有时会在某些条件(我不知道)它无法将焦点设置为最新的条形码编辑文本。
屏幕截图,显示请求重点关注最新项目:
,失败者:
我尝试调试logcat中显示false
的数据,这意味着它不应该集中在那里
这是我的脚本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)
答案 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)
}
....
}