Подтвердить что ты не робот

Spinner не получает фокус

Я использую поля 4 EditText и 2 spinners в активности. Порядок этих компонентов равен 2 EditText, затем 2 прядильщика, а затем 2 EditText поля.

Проблема возникает, когда я переношу фокус (с помощью мягкой клавиатуры следующей кнопки) от EditText до счетчика, прядильщик не получает фокус, а фокус переносится в следующее поле EditText, которое было помещено после блесны.

Я использовал requestfocus() на spinner, но это не сработало.

Как убедиться, что счетчик получает фокус?

4b9b3361

Ответ 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

Спасибо, я решил, выполнив следующее:

  • Я установил объект Spinner сверху (в рамках метода onCreate), чтобы убедиться, что мой код выполняется сначала
  • Я использовал следующее:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1); 
    s1.setFocusable(true); 
    s1.setFocusableInTouchMode(true);
    s1.requestFocus();
    

Ответ 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"/>

Но почему это даже необходимо... бьет меня.