Подтвердить что ты не робот

Переход к следующему EditText в андроиде

В соответствии с ответом и ответом Как автоматически перейти к следующему редактированию текста в android, я использовал код для перехода к следующему окну редактирования.

et1.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start,int before, int count) 
    {
        // TODO Auto-generated method stub
        if(et1.getText().toString().length()==size)     //size as per your requirement
        {
            et2.requestFocus();
        }
    }
    public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
                // TODO Auto-generated method stub

    }

    public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    }

});

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

4b9b3361

Ответ 1

Вы можете проверить нажатую клавишу для 1-го EditText, и если она была "Enter", а затем переместить фокус в следующий EditText.

Это может помочь вам: KeyCode_Enter к следующему редактору

Ответ 2

Возможно, очень поздно, но у меня есть решение, которое намного проще применять. Просто добавьте этот код в поле edittext в файле layout.xml. Добавьте это в edittext, который вы хотите показать следующую кнопку, а не сделанную кнопку. Таким образом, он укажет на следующее поле Edittext.

android:imeOptions="actionNext"

Ответ 3

Если вы хотите сфокусировать следующий EditText на нажатом нажатии, вы можете использовать эти параметры в XML-коде, чтобы сфокусировать следующий EditText:

Вариант 1:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionNext"
    android:singleLine="true"/>

Вариант 2:

<EditText
    android:id="@+id/et1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:nextFocusForward="@+id/et2"/>

<EditText
    android:id="@+id/et2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"/>

Ответ 4

Вам нужно подтвердить ввод пользователя, чтобы оправдать ваши ожидания. Если это выполнено, тогда вызывайте только et2.requestFocu()

Ответ 5

Это работает для меня:

final EditText code1=((EditText)view.findViewById(R.id.code1));
    final EditText code2=((EditText)view.findViewById(R.id.code2));
    final EditText code3=((EditText)view.findViewById(R.id.code3));
    final EditText code4=((EditText)view.findViewById(R.id.code4));



    OnKeyListener key=new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(!((EditText) v).toString().isEmpty())
            v.focusSearch(View.FOCUS_RIGHT).requestFocus();

            return false;
        }
    };




    code1.setOnKeyListener(key);
    code2.setOnKeyListener(key);
    code3.setOnKeyListener(key);

Ответ 6

Вы также можете проверить свое условие, если это так, или нет.

if(et1.getText().toString().length()==size)     //size as per your requirement
    {
        if(et1.gettext.toString().equals(somethingwhichyouhavecheck))
        {

                   et2.requestFocus();
        }
        else
         {
         }
    }

Ответ 7

Этот код работает так, как ожидалось.

etFName.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK)
                {
                    typinget1 = true;
                }
                else if(etFName.getText().toString().length()==4 && typinget1==true)     //size as per your requirement
                {
                    typinget1 = false;
                    etLName.requestFocus();

                }
                else if(etFName.getText().toString().length()<=4 && typinget1==false)
                {
                    typinget1 = true;

                }

                return false;
            }
        });

Ответ 8

У меня очень простое решение для этого просто поместите следующее свойство в xml edittext control

Android: inputType = "textPersonName"