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
можно найти в документации.
Спасибо, я решил сделать следующее:
- Я установил объект Spinner сверху (в пределах
onCreate
метод) просто чтобы убедиться, что мой код выполняется первым Я использовал следующее:
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"/>
Но почему это даже необходимо... бьет меня.