如何在Android中计算EditText值?

时间:2011-08-06 05:48:01

标签: android android-edittext multiplication

在Android应用中,我使用两个EditText控件并将它们的两个值相乘。 如果一个EditTextnull,而在第二个我放了一个值,它就无法正常工作。 我该如何处理这种情况,我在另一个EditTextnull中有一个值,我想将这两个值相乘?

3 个答案:

答案 0 :(得分:5)

首先,您需要触发何时执行计算。说它是一个按钮,或者更好的是,每当你EditText之一的值发生变化时:

private EditText editText1,
                 editText2;
private TextView resultsText;

...............................

// Obtains references to your components, assumes you have them defined
// within your Activity's layout file
editText1 = (EditText)findViewById(R.id.editText1);
editText2 = (EditText)findViewById(R.id.editText2);

resultsText = (TextView)findViewById(R.id.resultsText);

// Instantiates a TextWatcher, to observe your EditTexts' value changes
// and trigger the result calculation
TextWatcher textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
        calculateResult();
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
};

// Adds the TextWatcher as TextChangedListener to both EditTexts
editText1.addTextChangedListener(textWatcher);
editText2.addTextChangedListener(textWatcher);

.....................................

// The function called to calculate and display the result of the multiplication
private void calculateResult() throws NumberFormatException {
  // Gets the two EditText controls' Editable values
  Editable editableValue1 = editText1.getText(),
           editableValue2 = editText2.getText();

  // Initializes the double values and result
  double value1 = 0.0,
         value2 = 0.0,
         result;

  // If the Editable values are not null, obtains their double values by parsing
  if (editableValue1 != null)
    value1 = Double.parseDouble(editableValue1.toString());

  if (editableValue2 != null)
    value2 = Double.parseDouble(editableValue2.toString());

  // Calculates the result
  result = value1 * value2;

  // Displays the calculated result
  resultsText.setText(result.toString());
}

答案 1 :(得分:2)

点击按钮,它会将EditText框的2个值相乘,并检查它们是否为空:

private EditText txtOne;
private EditText txtTwo;
private EditText txtResult;
private Button btnCount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtOne = (EditText) findViewById(R.id.editText1);
    txtTwo = (EditText) findViewById(R.id.editText2);
    txtResult = (EditText) findViewById(R.id.editText3);

    btnCount = (Button) findViewById(R.id.button1);
    btnCount.setText("Count");

    btnCount.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {               
            if (txtOne.getText() != null || txtTwo.getText() != null)
                txtResult.setText(String.valueOf(Double.parseDouble(txtOne.getText().toString()) * Double.parseDouble(txtTwo.getText().toString())));       
        }
    });
}

答案 2 :(得分:1)

@luvieere代码略有变化:

//import all the importables

public class MainActivity extends ActionBarActivity 
{

 EditText   Text1,
            Text2;

 double value1,
        value2,
        result;


@Override
protected void onCreate(Bundle savedInstanceState) 
{   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ResultField = (TextView)findViewById(R.id.ResultField);

    TextWatcher textWatcher = new TextWatcher(){
        public void afterTextChanged(Editable s){
            calcResult(); 
        }
        public void beforeTextChanged(CharSequence s, int start, int count, int after){}
        public void onTextChanged(CharSequence s, int start, int before, int count){}
        };

    Text1 = (EditText)findViewById(R.id.Text1);
    Text2 = (EditText)findViewById(R.id.Text2);

    Text1.addTextChangedListener(textWatcher);
    Text2.addTextChangedListener(textWatcher);
    }


    private void calcResult() throws NumberFormatException {
    Editable editableText1 = Text1.getText(),
            editableText2 = Text2.getText();

    double  value1 = 0.0,
            value2 = 0.0,
            result;

    // NOTE: “&& editableText1.length() >= 1” prevents possible “invalid Double” errors!

    if (editableText1 != null && editableText1.length() >= 1)    
    value1 = Double.parseDouble(editableText1.toString());

    if (editableText2 != null && editableText2.length() >= 1)   
    value2 = Double.parseDouble(editableText2.toString());

    // Whatever your magic formula is
    result = value1 * value2; 

    ResultField.setText(Double.toString(result));
    {// Displays result to 2 decimal places
        ResultField.setText(String.format("%1.2f", result));    
    }
}           
}