Spinner no consigue el foco
Estoy utilizando 4 campos EditText
y 2 spinners en una actividad. El orden de estos componentes son 2 EditText
, luego 2 spinners y luego 2 campos EditText
.
El problema ocurre cuando transfiero el foco (con la ayuda del botón siguiente del teclado suave) de EditText
al hilandero, el hilador no consigue el foco y el foco se transfiere al campo siguiente de EditText
que fue colocado después de los hilanderos.
- No se puede administrar a requestFocus a Spinner
- Cómo ocultar spinner dropdown android
- El diálogo emergente de Spinner no ajusta su ancho en la rotación de la pantalla
- Android spinner no activó onItemSelected
- Eliminar espaciado o relleno en android Spinner
He utilizado requestfocus () en spinner, pero no funcionó.
¿Cómo me aseguro de que el hilandero se enfoque?
- Tamaño del texto de un spinner
- Establecimiento de hilanderos en fragmento
- JSON Parsing problema con Spinners
- Spinner eliminar elementos
- SetSelection en Spinner basado en rowId
- Spinner que agrega la matriz de la secuencia en la selección del artículo cómo puede conseguir el valor relacionado artículo en androide
- Android cómo obtener el elemento seleccionado de data spinner
- Alinear la flecha giratoria a la derecha del elemento seleccionado actualmente
Me las arreglé para encontrar una solución a continuación, el reposicionamiento de mi Spinner. En el EditText antes de la hiladora, agrega este listener:
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; } });
También es necesario agregar estas líneas a spinner capaz de obtener el enfoque:
spinner.setFocusable(true); // can be done in XML preferrable
Mi función hideKeyboard era sólo un detalle visual que quería añadir para que el teclado se escondiera:
private void hideKeyboard() { InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); }
Espero haber ayudado en esta pregunta difícil.
El indicador InputMethodManager.HIDE_NOT_ALWAYS
puede encontrarse en la documentación .
Gracias, he resuelto haciendo lo siguiente:
- Establecer el objeto Spinner en la parte superior (dentro del método
onCreate
) sólo para asegurarse de que mi código se ejecuta primero -
Utilicé lo siguiente:
Spinner s1 = (Spinner) findViewById(R.id.spinner1); s1.setFocusable(true); s1.setFocusableInTouchMode(true); s1.requestFocus();
Se trata de un disparo en la oscuridad, pero intente establecer la propiedad focusable (en XML o en código, como quiera que lo esté haciendo) a true en la ruleta.
http://developer.android.com/reference/android/view/View.html#attr_android:focusable
EDIT: También, vea esta pregunta: No se puede administrar a requestFocus a Spinner
Acabo de tener el mismo problema. Lo solucioné utilizando las propiedades 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"/>
Pero por qué esto es necesario … me gana.