Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь нажимает следующую кнопку на клавиатуре, программа должна сосредоточиться на следующем тексте EditText на экране и держать клавиатуру открытой, пока на экране больше не будет активированных EditTexts. Когда больше нет активированных EditTexts, клавиатура должна исчезнуть.
Другая проблема заключается в том, что при наличии EditText, который в данный момент не отображается на экране, он не получит фокус, пока пользователь не выберет его.
Я попытался с помощью диспетчера методов ввода показать клавиатуру, когда текст редактирования имеет фокус, и скрыть, когда ее нет. Если больше не активированы EditTexts, клавиатура все еще присутствует.
final InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (variable.getType().equals("Value")) {
if (variable.getFormat().equals("Number") || variable.getFormat().equals("2Number")) {
viewHolder.inputValue.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
} else if (variable.getFormat().equals("Text")) {
viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
}
} else if (variable.getType().equals("Message")) {
viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
} else {
//imm.hideSoftInputFromWindow(viewHolder.itemView.getWindowToken(), 0);
}
EditTexts хранятся в виде карт в обзоре переработчика. Каждая карта имеет тип переменной. Только переменные типа «Значение» и «Сообщение» должны получать фокус при нажатии следующей кнопки на клавиатуре.
Я ожидаю, что пользователь сможет прокручивать включенные EditTexts в RecyclerView, нажав следующую кнопку на клавиатуре. Если EditText не отображается на экране, экран должен прокрутиться вниз, чтобы получить фокус. Кроме того, если EditText отключен, он никогда не должен фокусироваться.