Borrar texto de EditText después de agregar la implementación onTextChanged
Estoy agregando un oyente a un campo EditText para formatear adecuadamente el número a la moneda en tiempo real.
loanText.addTextChangedListener(new TextWatcher() { private String current = ""; public void onTextChanged(CharSequence s, int start, int before, int count) { if(!s.toString().equals(current)){ String cleanString = s.toString().replaceAll("[$,.]", ""); double parsed = Double.parseDouble(cleanString); String formated = NumberFormat.getCurrencyInstance().format((parsed/100)); current = formated; loanText.setText(formated); loanText.setSelection(formated.length()); } } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } });
Sin embargo, cuando intento borrar el campo EditView, mi aplicación se bloqueará. Además, la tecla de retroceso ya no funciona.
- Android: cómo hacer crecer una vista para llenar el espacio disponible?
- Android WebView Scrollable
- Cómo cambiar el estilo progerssbar en SwipeRefreshLayout?
- Usar la etiqueta <include> con? Attr / myAttr
- Diferentes diseños de filas en ListView
- Android Studio 2.2 Vista previa 1 Problemas de renderizado
- Creación de Gridview con imágenes seleccionables, Android
- ScrollView no muestra su contenido correctamente en versiones inferiores de android
- Diseño de dos columnas con la primera columna wrap_content, second fill_parent
- Cambiar el color de las fechas seleccionadas en el widget CalendarView de android
- Establecer mayúsculas para TextView
- Barra de acciones Tabulaciones CustomView demasiado largo
- Diferentes dimensiones para diferentes idiomas
El problema es que su TextWatcher
ve que está "borrando" el texto y, por lo tanto, envía una solicitud a sus métodos de devolución de llamada ( afterTextChanged
, beforeTextChanged
, etc.).
Lo que he hecho es simplemente eliminar el TextWatcher
, borrar el texto, y agregar el TextWatcher
nuevo a la EditText
. De esa manera, nada está escuchando mis cambios de EditText
.
Es probable que tenga que aferrarse a una instancia de TextWatcher
lugar de inlining como lo hizo. De esta manera no tiene que crear uno cada vez que desee borrar el EditText
-
loanText.removeTextChangedListener(yourTextWatcherObject);
-
loanText.setText("");
-
loanText.addTextChangedListener(yourTextWatcherObject);
Intente utilizar afterTextChanged
en afterTextChanged
lugar. También tuve muchos problemas con el otro.
He encontrado esta clase que funciona muy bien para mí: http://www.java2s.com/Code/Android/UI/ConvertinputvaluetoCurrencyinTextWatcher.htm
Espero que les ahorre tiempo.
public class MainActivity extends Activity { EditText et; TextWatcher tw; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et=(EditText) findViewById(R.id.et); tw=new TextWatcher(){ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { et.removeTextChangedListener(tw); et.setText(Math.random()+"");//add your logic here et.addTextChangedListener(tw); }}; et.addTextChangedListener(tw); }
} Esta es una solución Simple.
Puede comprobar si Texto está vacío en onTextChanged como sigue y no hacer nada si está vacío
s.toString().isEmpty()
public void onTextChanged(CharSequence s, int start, int before, int count) { if(!s.toString().equals(current) && !s.toString().isEmpty()){ String cleanString = s.toString().replaceAll("[$,.]", ""); double parsed = Double.parseDouble(cleanString); String formated = NumberFormat.getCurrencyInstance().format((parsed/100)); current = formated; loanText.setText(formated); loanText.setSelection(formated.length()); } }
- ¿Cómo puedo verificar que la imagen URI es válida en Android?
- Abrir página en Facebook, Twitter y Google Plus desde otra aplicación – Android