Фокус клавиатуры Android теряется при переходе на другой режим с помощью DPAD - программирование
Подтвердить что ты не робот

Фокус клавиатуры Android теряется при переходе на другой режим с помощью DPAD

У нас есть 17 api, DPAD control и 4 edittexts в одном макете для ввода ввода. Когда пользователь пытается открыть что-то, что заблокировано в приложении, он столкнулся с фрагментом, где он должен ввести 4 цифры. Когда открывается вид, мы программно представляем фокус на первые контакты edittext и show keyboard. Когда пользователь вводит первую контактную цифру, мы программно устанавливаем фокус фокуса на второстепенные контакты edittext, где пользователь должен вводить второе значение штыря и так далее.

Проблема: после того, как пользователь вводит значение первого штыря, фокус клавиатуры (подсвеченный) исчезает, а для второго вывода пользователь должен перейти с клавиатуры с начала снова. На 21 api тот же код работает хорошо, и фокус клавиатуры (выделенный) остался на предыдущем значении. Как оставить фокус клавиатуры (выделено), когда он был раньше, на 17 api, когда вы настраиваете фокус фокуса на другое изображение?

Вот код:

public class PasswordFragment extends BaseFragment {
    private final ArrayList<Disposable> disposables = new ArrayList<>();
    @BindViews({R.id.passFirst, R.id.passSecond, R.id.passThird, R.id.passFour})
    EditText[] pinEdits;
    @BindDrawable(R.drawable.border_light)
    Drawable borderLight;
    @BindDrawable(R.drawable.border_white)
    Drawable borderWhite;
    @Inject
    PrefsRepo prefsRepo;
    @Inject
    ToastUtil toastUtil;
    @BindView(R.id.passTitle)
    TextView passTitle;
    @BindString(R.string.insert_pin)
    String defDialogMes;
    private InputMethodManager inputMethodManager;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        App.getAppComponent().inject(this);
        inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = super.onCreateView(inflater, container, savedInstanceState);
        for (EditText pinEdit : pinEdits) {
            pinEdit.setOnFocusChangeListener((view, hasFocus) -> {
                if (hasFocus) {
                    view.setBackground(borderLight);
                }
            });
        }
        disposables.add(RxTextView.textChanges(pinEdits[0]).subscribe(charSequence -> {
            if (charSequence.length() == 1) {
                pinEdits[1].requestFocus();
            }
        }));
        disposables.add(RxTextView.textChanges(pinEdits[1]).subscribe(charSequence -> {
            if (charSequence.length() == 1) {
                pinEdits[2].requestFocus();
            }
        }));
        disposables.add(RxTextView.textChanges(pinEdits[2]).subscribe(charSequence -> {
            if (charSequence.length() == 1) {
                pinEdits[3].requestFocus();
            }
        }));
        disposables.add(RxTextView.textChanges(pinEdits[3])
                .subscribe(charSequence -> {
                    if (charSequence.length() == 1) {
                        String pin = pinEdits[0].getText().toString() + pinEdits[1].getText().toString() + pinEdits[2].getText().toString() + pinEdits[3].getText().toString();
                        if (pin.length() == 4) {
                              do someting;
                        } else {
                            toastUtil.showToast(getString(R.string.pin_incorrect));
                        }
                    }
                }));
        return v;
    }


    @Override
    public void onResume() {
        clearEditTexts();
        super.onResume();

    }

    private void clearEditTexts() {
        for (EditText pinEdit : pinEdits) {
            pinEdit.getText().clear();
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR1){
                pinEdit.setOnClickListener(view -> {
                    showKeyBoard(pinEdit);
                });
            }
        }
        setFocusOnFirst();
    }

    private void setFocusOnFirst() {
        pinEdits[0].setBackground(borderLight);
        pinEdits[0].requestFocus();
        pinEdits[0].postDelayed(() -> {
            showKeyBoard(pinEdits[0]);
        }, 50);
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        for (Disposable disposable : disposables) {
            disposable.dispose();
        }
    }


    @Override
    protected int getLayoutId() {
        return R.layout.fragment_password;
    }


    private void showKeyBoard(EditText editText){
        inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
}
4b9b3361