studio soft how hidekeyboard force edittext close android android-listview android-edittext android-softkeyboard ontouchlistener

soft - how to close keyboard android studio



EditText en Listview pierde el foco cuando se presiona en Android 4.x (9)

Sé que hay muchas preguntas similares aquí, pero no pude obtener ninguna de las soluciones proporcionadas que funcionan en una aplicación de muestra simple.

El problema ocurre cuando se muestra el teclado por primera vez. Tan pronto como se muestre, solo presionando EditText nuevamente lo hace editable.

Probé lo siguiente:

android:windowSoftInputMode="adjustPan|adjustResize"

Esto no soluciona ningún problema. Parece que esta línea es obligatoria para cambiar el tamaño de la actividad después de que aparezca el teclado. Desafortunadamente, también está causando que los EditTexts pierdan el foco. Probablemente esto se deba al ListView mismo que se enfoca después del proceso de cambio de tamaño. Así que probé la siguiente solución alternativa:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

Esto siempre causa el primer EditText visible que el ListView contiene para obtener el foco, lo cual es indeseable. El segundo EditText en la segunda fila debería, en cambio, enfocar cuando se presiona, lo que no está sucediendo. Además, si finalmente conseguí enfocar otro EditText distinto del primero mostrado (por ejemplo, presionando ''Siguiente'' en el softkeyboard ), el primero visible recibirá el foco después de que el teclado se cierre y el ListView vuelva a cambiar a tamaño completo .

onFocusChange() varias otras cosas, como interceptar eventos de onFocusChange() para ListView, mientras sabía qué EditText había pulsado TouchListener . Solicitar el enfoque para ese cierto EditText de nuevo tampoco condujo a ningún éxito.

El uso de un ScrollView lugar de un ListView según lo sugerido por otros usuarios tampoco es una opción para el proyecto en cuestión.


Cuando la lista es lo suficientemente larga para cubrir el teclado EditText , EditText en EditText pierde el foco cuando se presiona en Android 4.x.

Una solución es envolver Listview en un diseño lineal con una altura de la mitad de la pantalla.

Cuando Listview no cubre el teclado, todo está bien.


En mi caso agregué el valor local actualmenteFocusedRow en mi Adaptador. En el método getView () he agregado estos códigos a cada editText:

if (currentlyFocusedRow == position) { editText.requestFocus(); } editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { if (currentlyFocusedRow == -1) { currentlyFocusedRow = position; } } else { currentlyFocusedRow = -1; } } });


Estaba teniendo el mismo problema con recyclerView y probando todas las soluciones sugeridas.

Finalmente, el problema en mi caso era que el recyclerView tenía wrap_content como valor para la altura en mi XML por accidente; lo cambió a match_parent y comenzó a funcionar como se esperaba, no se estableció ningún valor android:windowSoftInputMode="adjustResize" y se usó android:windowSoftInputMode="adjustResize"


Estaba teniendo problemas con el foco de "robo" de ActionBar cuando presioné un EditText ubicado dentro de una fila de ListView. Las soluciones anteriores no funcionaron, pero la siguiente solución funcionó para mí:

http://www.mysamplecode.com/2013/02/android-edittext-listview-loses-focus.html

Básicamente, agregué esto a mi ListView:

android:descendantFocusability="beforeDescendants"

y agregué esto a mi actividad:

android:windowSoftInputMode="adjustPan"


Modifique su manifiesto xml para agregar windowSoftInputMode en su actividad:

<activity android:name=".YourActivity" android:windowSoftInputMode="adjustPan"> </activity>


Sé que es un hilo muy viejo, pero esta respuesta podría ser útil para alguien, así que aquí está:

Cambie a RecyclerView y no tendrá que preocuparse por estos problemas molestos de ListView. En lugar de crear una nueva vista, recicla y reutiliza vistas anteriores.


Un truco clásico para situaciones como esta es utilizar un controlador y postDelayed() . En tu adaptador:

private int lastFocussedPosition = -1; private Handler handler = new Handler(); public View getView(final int position, View convertView, ViewGroup parent) { // ... edittext.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { handler.postDelayed(new Runnable() { @Override public void run() { if (lastFocussedPosition == -1 || lastFocussedPosition == position) { lastFocussedPosition = position; edittext.requestFocus(); } } }, 200); } else { lastFocussedPosition = -1; } } }); return convertView; }

Esto funciona en mi dispositivo, pero mantenga este código fuera de producción. Tampoco me sorprendería si el error de enfoque se manifiesta de forma diferente en diferentes versiones de Android o roms.

También hay muchos otros problemas con la incrustación de un EditText dentro de un ListView que tienen soluciones que se sienten como un truco. Ver a todas las other people luchando.

También es muy fácil que suceda algo como esto:

.

Después de haber seguido caminos similares muchas veces, en su mayoría he desistido de intentar anular cualquiera de los comportamientos o peculiaridades predeterminados del teclado. Yo recomendaría tratar de encontrar una solución alternativa en su aplicación si es posible.

¿Ha considerado que las filas de ListView sean solo TextView estilo y luego mostrar un EditText Dialog con EditText cuando se hace clic en una fila, actualizando TextView según sea necesario?



estaba teniendo el mismo problema Se buscaron todas las soluciones con InputMode, Focusability et al. La mejor solución, migrar a la vista de reciclador.