setFocus的EditText OnKeyListener未能按预期工作

时间:2019-02-20 08:26:37

标签: android android-edittext onkeylistener

我正在使用带有物理硬件键盘的Android设备。
屏幕上有两个WKWebView(零件号和数量)和两个EditTexts(重置并保存)。

键入用户数量后,他们想通过物理键盘按 Enter 键来触发“保存”功能。
我当前的“保存”功能会将数据保存到文件并清除屏幕上的数据,并将焦点设置为零件号。

我的Buttons似乎一经使用就没有返回True,而是触发了另一个Enter键,将光标移动到“数量”字段(右边,它应该留在“零件号”字段中)。
我以为返回True将指示此Enter键已被使用,我理解正确吗?

我的两个onKeyListener直接放在EditText下(而不是在任何子布局下)。
知道我的代码哪里出错了吗?

以下是我的布局代码。

ConstraintLayout

下面是我的Java代码。
这在onCreate方法中。

<EditText
    android:id="@+id/etPart"
    android:layout_width="200dp"
    android:maxLength="20"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:maxLines="1"
    android:inputType="text"
    android:imeOptions="actionNext"
    app:layout_constraintLeft_toRightOf="@+id/tvPart"
    app:layout_constraintTop_toTopOf="parent"/>

 <EditText
    android:id="@+id/etQty"
    android:layout_width="100dp"
    android:maxLength="5"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:inputType="number"
    android:maxLines="1"
    android:imeOptions="actionDone"
    app:layout_constraintLeft_toRightOf="@+id/tvQty"
    app:layout_constraintTop_toBottomOf="@id/etPart"
    android:nextFocusDown="@id/etPart"/>

这是功能。

etQty.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if(i == KeyEvent.KEYCODE_ENTER){
                saveData(null);
                // I tried to use return true here, sames result, no different.
            }
            return false;
        }
    });

2 个答案:

答案 0 :(得分:0)

这通常是由软键盘引起的,您可以尝试使用此代码吗?

etPart.requestFocus();
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.restartInput(etPart);
imm.showSoftInput(etPart, 0);

答案 1 :(得分:0)

与专家确认后,我了解到我也需要处理Action Up(Key Up)。

下面是工作代码。

    etQty.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if(i == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_UP){
                saveData(null);
                return true;
            }
            return false;
        }
    });