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

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

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

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

Как мне убедиться, что спиннер сфокусирован?

4 ответа

Мне удалось найти решение, отличное от изменения положения моего 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 можно найти в документации.

Спасибо, я решил сделать следующее:

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

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

Это выстрел в темноте, но попробуйте установить для свойства focusable (в XML или в коде; независимо от того, как вы это делаете) значение true на счетчике.

http://developer.android.com/reference/android/view/View.html

РЕДАКТИРОВАТЬ: Кроме того, см. Этот вопрос: не удается запросить Фокус спиннер

У меня просто была такая же проблема. Я решил это, используя свойства 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"/>

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

Другие вопросы по тегам