Ссылка на нулевой объект в OnEditorAction с использованием Butterknife в Android - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь использовать интерфейс OnEditorAction от ButterKnife для события "ENTER" EditText

@OnEditorAction(R.id.et_good)
boolean onEditorAction(EditText editText, int actionId, KeyEvent keyEvent) {
    if (keyEvent.getAction() == KeyEvent.KEYCODE_ENTER) {
        updateArticle(editText.getText().toString().toUpperCase().trim());
    }
    return keyEvent.getAction() == KeyEvent.KEYCODE_ENTER;
}

Однако я продолжаю получать ИСКЛЮЧЕНИЕ, где

com.xxx.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxx.xxx, PID: 6391
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.KeyEvent.getAction()' on a null object reference
    at com.xxx.xxx.MainActivity.onEditorAction(MainActivity.java:68)
    at com.xxx.xxx.MainActivity_ViewBinding$1.onEditorAction(MainActivity_ViewBinding.java:47)
    at android.widget.TextView.onEditorAction(TextView.java:5911)
    at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138)
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:360)
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Макет XML-файла для вашей справки.

<EditText
    android:id="@+id/et_good"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="8dp"
    android:paddingStart="10dp"
    android:singleLine="true"
    android:imeOptions="actionDone"
    app:layout_constraintEnd_toStartOf="@+id/xxx"
    app:layout_constraintStart_toEndOf="@+id/xxx"
    app:layout_constraintTop_toBottomOf="@+id/xxx" />

Пожалуйста, совет, что я пропускаю.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Попробуйте, так как в вашем xml определено android:imeOptions="actionDone", это должно сработать.

@OnEditorAction(R.id.et_good)
boolean onEditorAction(EditText editText, int actionId, KeyEvent keyEvent) {
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        updateArticle(editText.getText().toString().toUpperCase().trim());
    }
    return actionId == EditorInfo.IME_ACTION_DONE;
}
0 голосов
/ 21 марта 2019

Согласно справочным документам API здесь , объект keyEvent будет нулевым, если событие НЕ является вводом ключевого события.Это может быть любое другое событие в EditText (например, событие focus в вашем случае.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...