OnEditorActionListener с imeOptions actionNext не работает

Вот мой код:

<android.support.design.widget.TextInputLayout
        android:id="@+id/mylayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/some_layout">
        <android.support.design.widget.TextInputEditText
            android:id="@+id/myid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:hint="@string/some_hint"
            android:imeOptions="actionNext"
            android:inputType="time"
            android:maxLength="@integer/max_input_length"
            android:maxLines="1"
            android:singleLine="true"
            android:textSize="15sp"/>
    </android.support.design.widget.TextInputLayout>

и код Java:

myField = (TextInputEditText) findViewById(R.id.myid);
    myField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                Log.d(TAG,"next");
                //Do something
                handled = true;
            }
            Log.d(TAG,"handled: "+handled);
            return handled;
        }
    });`

К сожалению, когда я нажимаю следующую кнопку на клавиатуре, ничего не происходит. Курсор не переходит на следующее поле. Я не вижу, что мне не хватает

2 ответа

Решение

Согласно документу

IME_ACTION_NEXT

Биты IME_MASK_ACTION: ключ действия выполняет "следующую" операцию, переводя пользователя в следующее поле, которое будет принимать текст.

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

Использование android:inputType="text" для тебя TextInputEditText

попробуйте позвонить view.requestFocus(); в ваших действиях.

myField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            Log.d(TAG,"next");
            //Do something
            Log.d(TAG,"handled: "+handled);
            view.requestFocus() ;  //add focus to next view object
            return true;   //return true
        }
        Log.d(TAG,"handled: "+handled);
        return false;   //add return
    }
});
Другие вопросы по тегам