Using TextWatcher to get values entered to two edittext and multiplying these values without a button. Automatic computation.

北城以北 提交于 2019-12-11 03:56:43

问题


I want the app to automatically compute when the user enters the requested two values into edittext, without needing a button.

Is there a way to do it without using TextWatcher?

here is my attempt. Why doesnt it work? The app force shuts when a number is entered in edittext.

'

public class BodyMassIndex extends Activity

{

double result;
    EditText age, height, weight;

TextView tvResult;

int ageInt;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bmi);
    initialize();

    TextWatcher textWatcher = new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            calculate();

        }



        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

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

        }

    };

    height.addTextChangedListener(textWatcher);
    weight.addTextChangedListener(textWatcher);

}

private void initialize() {
    // TODO Auto-generated method stub

    age = (EditText) findViewById(R.id.etAge);
    height = (EditText) findViewById(R.id.etHeight);
    weight = (EditText) findViewById(R.id.etWeight);

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


}

private void calculate() {
    // TODO Auto-generated method stub


    double heightInt = 1;
    double weightInt = 0;

    if (height != null)
        heightInt = Double.parseDouble(height.getText().toString());

    if (weight != null)
        weightInt = Double.parseDouble(weight.getText().toString());

    result = weightInt / (heightInt * heightInt);
    String textResult = "Your BMI is " + result;
    tvResult.setText(textResult);




}}
'

回答1:


You should set the default values of the edittext to 0. Its probably force closing because you are trying to parse an empty string from an edittext that has nothing in it;

EDIT: try this

if (height != null)
    heightInt = Double.parseDouble(!height.getText().toString().equals("")?
           height.getText().toString() : "0");

if (weight != null)
    weightInt = Double.parseDouble(!weight.getText().toString().equals("")?
           weight.getText().toString() : "0");

this way your using a condition where no matter what youll be parsing a value that wont throw an exception



来源:https://stackoverflow.com/questions/18091425/using-textwatcher-to-get-values-entered-to-two-edittext-and-multiplying-these-va

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!