Я использую устройство Android с физической аппаратной клавиатурой.У меня есть два EditTexts
(номер детали и кол-во) и два Buttons
(сброс и сохранение) на экране.После того, как пользователь введет Qty, он хочет нажать клавишу Enter на физической клавиатуре, чтобы вызвать функцию «Сохранить».Моя текущая функция сохранения сохранит данные в файл, очистит данные на экране и установит фокус на номер детали.
Похоже, что мой onKeyListener
не вернул значение True, как только оно было использовано, и вызывает другое действие клавиши Enter.чтобы переместить мой курсор в поле Qty (по праву он должен остаться в поле Part No).Я думал, что возврат True будет означать, что этот ключ Enter был использован, я правильно понимаю?
Мои два EditText
помещаются непосредственно под ConstraintLayout
(не под любым под-макетом).Любая идея о том, где мой код идет не так?
Ниже мой кусок кода для макета.
<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"/>
Ниже приведен мой код Java.Это в методе onCreate.
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;
}
});
Это функции.
public void saveData(View view) {
// check and save data to file logic.
// ...... etc.
mProductViewModel.insert(product);
resetView(null);
}
public void resetView(View view) {
etPart.setText(null);
etQty.setText(null);
// I am expecting the focus will stay in Part No box but it is not. It will jump to Qty field.
etPart.requestFocus();
}