Spinner не получает фокус
Я использую поля 4 EditText
и 2 spinners в активности. Порядок этих компонентов равен 2 EditText
, затем 2 прядильщика, а затем 2 EditText
поля.
Проблема возникает, когда я переношу фокус (с помощью мягкой клавиатуры следующей кнопки) от EditText
до счетчика, прядильщик не получает фокус, а фокус переносится в следующее поле EditText
, которое было помещено после блесны.
Я использовал requestfocus() на spinner, но это не сработало.
Как убедиться, что счетчик получает фокус?
Ответы
Ответ 1
Мне удалось найти решение, другое, чем перепозиционирование моего Spinner. В EditText до счетчик, добавьте этот прослушиватель:
editTextBefore.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
hideKeyboard();
textView.clearFocus();
spinner.requestFocus();
spinner.performClick();
}
return true;
}
});
Вам также нужно добавить эту линию в подходящий счетчик, чтобы получить фокус:
spinner.setFocusable(true); // can be done in XML preferrable
Моя функция hideKeyboard была просто визуальной деталью, которую я хотел добавить, так что клавиатура скрыта:
private void hideKeyboard() {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
Надеюсь, я помог в этом сложном вопросе.
Флаг InputMethodManager.HIDE_NOT_ALWAYS
может быть найден в документации.
Ответ 2
Спасибо, я решил, выполнив следующее:
Ответ 3
Это выстрел в темноте, но попробуйте установить свойство focusable (в формате XML или в коде, каким бы способом вы это делали), чтобы true на spinner.
http://developer.android.com/reference/android/view/View.html#attr_android:focusable
EDIT: Также см. этот вопрос: Невозможно выполнить запросFocus Spinner
Ответ 4
У меня была такая же проблема. Я решил это, используя свойства nextFocusDown/Up/Left/Right.
<EditText
android:id="@+id/tPhone"
...
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusDown="@+id/sCountry"/>
<Spinner
android:id="@+id/sCountry"
....
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusUp = "@+id/tPhone"
android:nextFocusDown="@+id/tStreet"/>
<EditText
android:id="@+id/tStreet"
...
android:visibility="gone"
android:focusableInTouchMode="true"
android:focusable="true"
android:nextFocusUp = "@+id/sCountry"/>
Но почему это даже необходимо... бьет меня.