android - Editar texto en ListActivity ListView pierde el foco cuando aparece el teclado
focus android-edittext (7)
He buscado y buscado una respuesta a esta pregunta y todo lo que parecía una respuesta no ha funcionado, así que supongo que solo lo haré.
Tengo un par de cuadros EditText
agregados a un ListView
que es la base de una ListActivity
. Cuando configuro windowSoftInputMode
para adjustPan
y adjustPan
clic en EditText
, funciona hasta que vuelves a hacer clic y el teclado lo cubre. Cuando uso adjustResize
funciona, excepto cuando aparece el teclado, EditText
pierde el foco y tengo que EditText
nuevo para escribir.
Estaba intentando descubrir cómo atrapar el onResize
pero parece estar asociado con la Vista y no con la actividad, y no estoy seguro de cómo escucharla. También probé todo tipo de configuraciones EditText
en los cuadros EditText
y el ListView
sí (como se sugiere en otras publicaciones que he leído) que tampoco parecen ser de ayuda.
En mi caso, funcionó perfectamente añadiendo esto como código para manifestar:
android:windowSoftInputMode="adjustPan"
Has probado después de adjustResize
asegurándote de restablecer el foco a EditText
haciendo algo como EditText.requestFocus();
para que tenga foco de nuevo y el usuario no tenga que volver a tocarlo. puede usar EditText.isFocused()
para ver si está enfocado (verdadero) o no (falso) en una declaración de registro de depuración o algo así.
es posible que necesite configurar el campo para que también se SetFocusable()
usando SetFocusable()
pero tenga cuidado ya que esto podría quitarle el foco del ListView
y evitar que pueda desplazarse o seleccionar cosas más tarde, así tendrá que jugar con la configuración enfocable y enfocada.
He experimentado exactamente el mismo problema en mi proyecto.
Para resolver el problema, he subclasificado el EditText
y EditText
manejado el botón "Atrás", presione - para asegurarme de que EditText
borra el foco en ese momento.
Verifique esta solución , sobre cómo hacerlo.
Buena suerte.
Para mí, una combinación de los siguientes me ayudó (especialmente el número 3):
1) Agregue lo siguiente a la Actividad relacionada en el archivo de manifiesto, esto es necesario para que su Vista de lista se modifique para llenar solo el área sobre el teclado de pantalla:
android:windowSoftInputMode="adjustResize"
2) Con lo siguiente, el ListView SOLO obtendrá el foco si ninguno de sus descendientes lo quiere. Los descendientes (EditText) deben obtener y mantener el foco.
<ListView
...
android:descendantFocusability="afterDescendants"/>
3) La presentación / ocultación automática de la barra Sugerencias de ortografía justo encima del teclado sigue activando el ListView para actualizar. Desactivé las sugerencias para cualquier texto de edición en mi ListView.
<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />
Todo lo que necesitas hacer es aplicar esto a tu ListView:
XML:
android:descendantFocusability="afterDescendants"
Java:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
la vista de reciclado funciona mejor y no hay necesidad de perder el tiempo con otras propiedades en cualquier lugar.
mViewHolder.editText = (EditText)convertView.findViewById(R.id.editText1);
mViewHolder.editText.setTag(position);
mViewHolder.editText.setTextColor(0xFF000000);
mViewHolder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
EditText et =(EditText)v.findViewById(R.id.editText1);
editTextArrayList.set(position,et.getText().toString().trim());
}
}
});
El siguiente enlace puede ayudarte http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html