在Edittext上自动计算

时间:2012-01-24 18:15:00

标签: java android

目前我正在使用我的onEditTextchanger。格式化我的货币。我想知道是否可以在用户键入edittext字段时从我的主java调用并运行Calculate函数。 我希望它的工作类似于 javascript 功能 onkeyup =" calc(this.form)" 因为我不知道如何实现这一点。任何想法,将不胜感激。再次感谢您的帮助。

    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

    }
}

爪哇

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() {
     //textViewResult.setText(addNumbers());              
    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));
}

}

1 个答案:

答案 0 :(得分:3)

你可以在afterTextChanged()中调用它,这样做有什么问题吗?