Custom ListAdapter consistente en EditText pierde el foco llamado dos veces
Estoy haciendo una aplicación de comercio electrónico cuya lista de carro tiene un ListView
personalizado que consiste en EditText
. El EditText
representa la cantidad del elemento. Estoy usando OnFocusChangeListener
para detectar cuando un cliente está hecho cambiando la cantidad del artículo entonces la actualización del carro en el servidor. Todo está funcionando bien, sólo el onFocusChange
se llama dos veces, es decir, me estoy poniendo false
dos veces.
viewHolder.etProductQuantity.setOnFocusChangeListener( new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean hasFocus) { if(!hasFocus){ // Updating the ProductList class's object to set the new quantity // Updating product quantity on server Log.d("Product Quantity", viewHolder.etProductQuantity.getText().toString() + b); } } });
Por lo tanto, la codificación se ejecuta dos veces lo que está creando problema.
- Cómo implementar un escucha
- Android getOnTouchListener con la versión del API> = 15
- Contando Chars en EditText Changed Listener
- Cómo hacer clic o tocar en un texto de TextView
- ¿Puedo hacer referencia al botón de OnClickListener desde dentro del listener? (androide)
- Android: ¿Utiliza una instrucción SWITCH con setOnClickListener / onClick para más de un botón?
- Evento de incendio en AsyncTask finalizado
- Detector de gestos no funciona
- ¿Hay algún mecanismo de devolución de llamada en android cuando hay datos disponibles para leer en socket
- Cómo manejar EditText Change Listener en android
- Android SearchView OnFocusChangeListener: onFocusChange no se llama en absoluto
- ¿Por qué mi onItemSelectedListener no se llama en un ListView?
- Android ¿cuántos hilos puedo tener?
Agregar la siguiente línea a su actividad en el manifiesto solucionó el problema:
android:windowSoftInputMode="adjustPan"
No estoy seguro de por qué.
Trate de mantener un indicador que se pierde el código de foco ejecutado una vez y luego nunca se ejecuta de nuevo:
viewHolder.etProductQuantity.setTag(1); viewHolder.etProductQuantity.setOnFocusChangeListener( new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean hasFocus) { if(!hasFocus && ((Integer)view.getTag())==1){ // Updating the ProductList class's object to set the new quantity // Updating product quantity on server Log.d("Product Quantity", viewHolder.etProductQuantity.getText().toString() + b); view.setTag(0); }else{ view.setTag(1); } } });
Usted puede usar como esto:
edt_sys_log_search.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE){ //do calling WS } return false; } });
Y establezca la propiedad EditText como sigue:
android:imeOptions="actionDone" singleLine="true"
Llamará a WS cuando el usuario presione Hecho desde SoftKeyboard