Как запросить Фокус редактировать текст на вид переработчика? - PullRequest
1 голос
/ 03 июля 2019

Я реализую RecyclerView, в каждом столбце которого есть EditText для ввода числа.когда я ввожу число и нажму следующую кнопку на клавиатуре, курсор должен перейти к следующему EditText, и он должен быть в фокусе.Моя проблема заключается в том, как вызвать функцию requestFocus() внутри адаптера, который имеет только один EditText

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 ]

1 голос
/ 03 июля 2019

для ввода нажатой клавиши используйте этот код

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;
    }
});

и когда нажата клавиша ввода, вы можете изменить фокус на следующий ряд, для этого вам нужно передать обзор переработчика адаптеру, аналогичному этому

   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)}
1 голос
/ 03 июля 2019

Если у вас есть следующая доступная позиция элемента, то я думаю, что

recyclerView.scrollToPosition(position)

изменит фокус на элемент в этой позиции, и, следовательно, дети также должны получить фокус.

PS:это не проверено

...