在 android 中添加编辑文本的值

Adding the values of the edittext in android

我有五个 edittext 字段,我将在其中输入金额值和一个单独的字段来显示总金额。比如说,我在第一个字段中输入 2000,然后单击第二个字段,将在总计字段中设置 2000。同样,如果我在第二个字段中输入 1500,则第一个和第二个的总和应设置为总字段,即 3500。同样,我需要在焦点更改时设置的所有五个字段总数。

int total = 0;
int val = 0;

monthly_rent_et.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
              System.out.println("Calc "+Integer.valueOf(monthly_rent_et.getText().toString()));
              val = val + total+Integer.valueOf(monthly_rent_et.getText().toString());
              total_et.setText(String.valueOf(val));
            }
        }
     });
    water_et.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
              System.out.println("Calc "+Integer.valueOf(water_et.getText().toString()));
              val = val + total+Integer.valueOf(water_et.getText().toString());
              total_et.setText(String.valueOf(val));
            }
        }
     });

此代码为我提供了答案,但在编辑金额时,旧值和编辑后的值都会被添加。如何解决这个问题?有没有更好的方法来做这个计算?

不是将当前值添加到现有总值,而是从所有 EditText 中获取值,然后将总计设置为总计 EditText。 例如:

  water_et.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
              int final =0;
              final+=getValue(et1.getText().toString()); //Add the first edittext value
              final+=getValue(et2.getText().toString()); //Add the second edittext value
              final+=getValue(et3.getText().toString()); //Add the third edittext value
              final+=getValue(et4.getText().toString()); //Add the forth edittext value
              final+=getValue(et5.getText().toString()); //Add the fifth edittext value

              total_et.setText(String.valueOf(final));
            }
        }
     });

   public int getValue(String text)){
      if(TextUtils.isEmpty(text){
          return 0;
       }
     return Integer.valueOf(text);
}

创建一个数组来包含所有五个 editTexts 以减少您的代码并像这样进行计算:

EditText[] editTexts;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // After setting contentView and other initialisations
    editTexts = new EditText[] {monthly_rent_et, water_et, ....};
    for (int i=0 ; i<editTexts.length ; i++) {
        editTexts[i].setOnFocusChangeListener(mFocusChangeListener);
    }
}

private View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        int total = 0;
        for (int i=0 ; i<editTexts.length ; i++) {
            try {
                total += Integer.valueOf(editTexts[i].getText().toString());
            } catch(Exception e) {}
        }
        total_et.setText(total + "");
    }
};
Edittext1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Total.setText(Edittext1.getText().toString());        
    }
});
Edittext2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
         Total.setText(Edittext1.getText().toString() + Edittext2.getText().toString());
    }
});

像 Wise 一样,您可以更改代码

你的代码应该是这样的

public class CalculatorActivity extends Activity implements  View.OnFocusChangeListener{
    private EditText et1;
    private EditText et2;
    private EditText et3;
    private EditText et4;
    private EditText et5;
    private EditText resultet;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calculator);
        et1 =(EditText)findViewById(R.id.et1);
        et2 =(EditText)findViewById(R.id.et2);
        et3 =(EditText)findViewById(R.id.et3);
        et4 =(EditText)findViewById(R.id.et4);
        et5 =(EditText)findViewById(R.id.et5);
        resultet = (EditText)findViewById(R.id.resultet);

        et1.setOnFocusChangeListener(this);
        et2.setOnFocusChangeListener(this);
        et3.setOnFocusChangeListener(this);
        et4.setOnFocusChangeListener(this);
        et5.setOnFocusChangeListener(this);


    }

    @Override
    public void onFocusChange(View view, boolean b) {
        if(!b) {
            int sum = sumAllEditTextValues();
            resultet.setText(sum);
        }
    }
    int sumAllEditTextValues(){
        int result =0;
        result+=parseLieniant(et1.getText().toString());
        result+=parseLieniant(et2.getText().toString());
        result+=parseLieniant(et3.getText().toString());
        result+=parseLieniant(et4.getText().toString());
        result+=parseLieniant(et5.getText().toString());
        return 0;
    }
    private int parseLieniant(String s ){
        int result = 0;
        try{
            result =  Integer.parseInt(s);
        }catch(Exception e){

        }
        return result;
    }
}