当有带按钮的RecyclerView时,SetFocus在带硬件键盘的Activity的EditText上不起作用

时间:2019-08-27 16:04:05

标签: android kotlin android-recyclerview

我有一个带有EditText的Kotlin购物车活动,用户可以使用蓝牙条形码扫描仪(充当硬件键盘)来扫描条形码。当用户扫描商品时,该商品会被添加到RecyclerView购物车中,他们可以在其中调整数量(使用CardView行上的按钮)。

活动首次启动时,焦点位于EditText中,并且不存在软键盘。但是,当用户扫描条形码时(蓝牙条形码扫描仪添加了CR),我无法获得焦点以自动返回到EditText,以便用户可以扫描下一个条形码。在edittext上的setfocus似乎不起作用。焦点实际上设置为RecyclerView CardView行中的按钮之一。

用户可以触摸EditText来设置焦点(并调出软键盘)。但是我不希望用户在每次扫描之间都必须这样做。

我未能成功使用SetFocus和SetOnFocusChangeListener,但无法使任何东西正常工作。当CardView中没有任何可单击的项目时,我过去曾使用过此SetFocus。但是似乎添加带按钮和/或可单击TextView的CardView似乎破坏了活动的EditText上的SetFocus。

有人有什么建议吗?任何想法将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

显然,在检查按下Enter键时,焦点的工作方式有所不同。当我使用KeyEvent.ACTION_DOWN时,无论尝试什么,我都无法集中精力工作。当我使用KeyEvent.ACTION_UP时,焦点将按我预期的那样工作。

override fun onCreate(savedInstanceState: Bundle?) {
...
        // when using bar code scanner (or PC Keyboard when using Android Emulator), process barcode at Enter on end of barcode scan
        test_editTextSearch.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
            // If the event is a key-down event on the "enter" button
            if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
                searchItems()
                return@OnKeyListener true
            }
            false
        })
}

    fun searchItems() {
        cartItemsList.add(test_editTextSearch.text.toString())
        rvAdapter.notifyDataSetChanged() //Update Screen
        test_editTextSearch.setText("")
        test_editTextSearch.requestFocus()
    }