2016-08-22 3 views
0

Ich versuche Format eines Wertes in einem EditText eingegeben, muss dies sofort geschehen, dh sobald der Benutzer Wert in EditText eingibt, muss die Anwendung den Wert formatieren und setzen zum EditText wieder. Mein Code ist nicht korrekt, und ich kann keine Möglichkeit findet Nummer rechtzeitigAndroid Format Wert Währung, wenn Benutzer Typ Nummer auf EditText

transfer_amount.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { 
    } 
    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 
    @Override 
    public void afterTextChanged(Editable charSequence) { 
     if (charSequence.toString().length() == 1 && charSequence.toString().equals("0")) { 
      transfer_amount.setText(""); 
     } else if (charSequence.toString().length() > 0 && (int) charSequence.toString().charAt(0) >= 48 && (int) charSequence.toString().charAt(0) <= 57) { 
      Locale swedish = new Locale("sv", "SE"); 
      NumberFormat swedishFormat = NumberFormat.getCurrencyInstance(swedish); 
      transfer_amount.setText(swedishFormat.format(Long.parseLong((charSequence.toString())))); 
     } 
    } 
}); 

UPDATE zu forma

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    long enteredNumber = Long.parseLong(s.toString().replace(",", "")); 
    transfer_amount.removeTextChangedListener(this); 
    DecimalFormat formatter   = new DecimalFormat("#,###,###"); 
    String  yourFormattedString = formatter.format(enteredNumber); 
    Log.e("yourFormattedString ", yourFormattedString); 
    transfer_amount.setText(yourFormattedString); 
    transfer_amount.addTextChangedListener(this); 
} 

dieser Code Arbeit bis Formatnummer, wenn mein EditText formatiert gelöscht und ich weiß nicht, was Problem,

Mein Log:

E/yourFormattedString: 1 
E/yourFormattedString: 11 
E/yourFormattedString: 111 
E/yourFormattedString: 1,111 
E/yourFormattedString: 1 
+0

warum Bedingung && (int) charSequence.toString(). CharAt (0)> = 48 && (int) charSequence.toString(). CharAt (0) <= 57, bitte erläutern. Anstelle von Long.parseLong ((charSequence.toString())) habe ich Double verwendet und es funktioniert gut, aber für ein anderes Gebietsschema. – Ramit

+0

@Ramit Begrenzung zwischen '0' und '9' –

+0

Ok, ich habe ein Problem. Sie setzen den Text in afterTextChanged, so dass er nach afterThangeChanged erneut aufgerufen wird. Ich bin nicht sicher, dass das Währungssymbol Anfang oder Ende für erwähnte Währung hinzufügen wird. Bitte folgen @ Shabbir Antwort, um Textwatcher zuerst zu entfernen und dann fügen Sie es erneut, um unnötigen Aufruf von Textänderung zu verhindern – Ramit

Antwort

0

Für Text ändern Runtime Sie darauf achten müssen, um die ursprüngliche Zeichenfolge und die geänderte Zeichenfolge.

tt = new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
      if(s.length()!=0) { 
       long enteredNumber = Long.parseLong(s.toString().replace(",", "")); 
       nameEdit.removeTextChangedListener(this); 
       DecimalFormat formatter = new DecimalFormat("#,###,###"); 
       String yourFormattedString = formatter.format(enteredNumber); 
       Log.e("yourFormattedString ", yourFormattedString); 
       nameEdit.setText(yourFormattedString); 
       nameEdit.addTextChangedListener(this); 
       nameEdit.setSelection(yourFormattedString.length()); 
      } 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 
    }; 
    nameEdit.addTextChangedListener(tt); 
+0

nach Format Wert, Ursache von meinem 'edittext' gelöscht, aktualisiert mein Beitrag –

+0

Drucken LOG –

+0

Post mit Logcat Ergebnis aktualisiert –

Verwandte Themen