OnEditTextChanger overwriting Android:Input method
<p>Using my onEditTextchanger. It works fine when the user inputs 100000, in the EditText box it shows $100,000.00 as the user types. Which is correct.
The problem is however if I try to display a numeric keyboard rather than a Qwerty keyboard. By adding in the XML I add  android: inputType=”numberDecimal”   I lose the formatting of $ and the,  and the EditText displays like 100000.00. I have noticed this happens if I change the InputType to Number or Decimal as  well.  I have attached the code.
Any ideas?  Again Thanks in advance for your help.</p>

<p>XML</p>

<pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" &gt;

&lt;TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number1"
    android:textAppearance="?android:attr/textAppearanceMedium" /&gt;

&lt;EditText
    android:id="@+id/txta"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="0" /&gt;

&lt;TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number2" /&gt;

&lt;EditText
    android:id="@+id/txtb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="0" /&gt;

&lt;TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Number3" /&gt;

&lt;TextView
    android:id="@+id/txtc"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" /&gt;

&lt;TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your Answer is"
    android:textAppearance="?android:attr/textAppearanceMedium" /&gt;

&lt;TextView
    android:id="@+id/txtd"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /&gt;

&lt;Button
    android:id="@+id/buttonCalc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Calculate" /&gt;
</code></pre>

<p></p>

<p>Java</p>

<pre><code>public class CalcTestActivity extends Activity {
    private EditText txta;
    private EditText txtb;
    private TextView txtc;
    private TextView txtd;


    private double a = 0;
    private double b = 0;
    private double c = 0;
    private double d = 0;

    private Button buttonCalc;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initControls();

        txta.addTextChangedListener(new CurrencyTextWatcher());
        txtb.addTextChangedListener(new CurrencyTextWatcher());

    }   



    private void initControls() {

        txta = (EditText)findViewById(R.id.txta);
        txtb = (EditText)findViewById(R.id.txtb);
        txtc = (TextView)findViewById(R.id.txtc);
        txtd = (TextView)findViewById(R.id.txtd);

        buttonCalc = (Button)findViewById(R.id.buttonCalc);
        buttonCalc.setOnClickListener(new Button.OnClickListener() {

            public void onClick(View v) {calculate(); }});}

    private void calculate() {

        a=Double.parseDouble(txta.getText().toString().replace("$", "").replace(",", ""));
        b=Double.parseDouble(txtb.getText().toString().replace("$", "").replace(",", ""));
        c=Math.round(a*.88);                
        txtc.setText(GlobalMoney.FormatValue(c));
        d=Math.round((a*.87)+(b*.61)*(c*.25));
        txtd.setText(GlobalMoney.FormatValue(d));
    }


}
</code></pre>

<p>TextWatcher</p>

<pre><code>import java.text.NumberFormat;
import android.text.Editable;
import android.text.TextWatcher;

public class CurrencyTextWatcher implements TextWatcher {

    boolean mEditing;

    public CurrencyTextWatcher() {
        mEditing = false;
    }

    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if(!mEditing) {
            mEditing = true;

            String digits = s.toString().replaceAll("\\D", "");
            NumberFormat nf = NumberFormat.getCurrencyInstance();
            try{
                String formatted = nf.format(Double.parseDouble(digits)/100);
                s.replace(0, s.length(), formatted);
            } catch (NumberFormatException nfe) {
                s.clear();
            }

            mEditing = false;
        } 
    }
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub

    }

}
</code></pre>
