Spinner не получает фокус - PullRequest
21 голосов
/ 22 июня 2011

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

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

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

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

Ответы [ 4 ]

39 голосов
/ 04 апреля 2013

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

19 голосов
/ 23 июня 2011

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

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

    Spinner s1 = (Spinner) findViewById(R.id.spinner1); 
    s1.setFocusable(true); 
    s1.setFocusableInTouchMode(true);
    s1.requestFocus();
    
6 голосов
/ 22 июня 2011

Это выстрел в темноте, но попробуйте установить свойство фокусируемости (в XML или в коде; каким бы способом вы его не делали) на true на счетчике.1005 * РЕДАКТИРОВАТЬ: Кроме того, см. Этот вопрос: Не удается запросить Фокус Spinner

0 голосов
/ 22 апреля 2017

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

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

...