如何在回收者视图上请求关注editText?

时间:2019-07-03 15:33:33

标签: android android-recyclerview android-softkeyboard

我正在实现一个RecyclerView,每列包含一个EditText,以输入一个数字。当我输入数字并单击键盘上的下一个按钮时,光标应转到下一个EditText,并且应该聚焦。我的问题是如何在只有一个EditText的适配器中调用requestFocus()函数

enter image description here

下面给出的是我在bindview内的适配器功能

 outstandingItemRowHolder.adviceNote.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_GO) {
                        InputMethodManager imm = (InputMethodManager) POReceiptDetailsFragment.poReceiptDetailsFragment.getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
                        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

                        if(POReceiptDetailsFragment.poReceiptDetailsFragment != null){
                            //function to go to the next edittext???
                        }
                        return true;
                    }
                    return false;
                }
            });

当按下软键盘的下一个按钮时,谁能告诉我如何进入下一个editText框?

2 个答案:

答案 0 :(得分:1)

如果您有下一个职位可用,那么我认为

recyclerView.scrollToPosition(position)

将焦点移到该位置上的项目,因此孩子也应该获得焦点。

PS:未经测试

答案 1 :(得分:1)

对于Enter键,请使用此代码

editText.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN
                    && event.getKeyCode() ==       KeyEvent.KEYCODE_ENTER) 
            {
                Log.i("event", "captured");

                return false;
            } 

        return false;
    }
});

当按下回车键时,您可以将焦点更改到下一行,因为您必须将recyclerview传递给适配器,这样

   public CheckoutRecyclerviewAdapter(Context context, 
    CartItems cartItems,Recyclerview recyclerview) {
    this.context = context;
    this.cartItems = cartItems;
    this.recyclerview = recyclerview
}

之后,您必须将位置滚动到此代码中的下一项

if(position<size+1{recyclerview.getLayoutManager().scrollToPosition(thisposition+1)}