java - 使用 TextWatcher 获取输入到两个编辑文本中的值,并在没有按钮的情况下将这些值相乘。自动计算。

标签 java android textwatcher

我希望应用程序在用户将请求的两个值输入到 edittext 时自动计算,而不需要按钮。

有没有办法在不使用 TextWatcher 的情况下做到这一点?

这是我的尝试。为什么不起作用?当在 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);




}}
'

最佳答案

您应该将 edittext 的默认值设置为 0。它可能会强制关闭,因为您正在尝试从其中没有任何内容的 edittext 中解析空字符串;

编辑:试试这个

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");

这样你就可以使用一个条件,无论什么情况你都会解析一个不会抛出异常的值

关于java - 使用 TextWatcher 获取输入到两个编辑文本中的值,并在没有按钮的情况下将这些值相乘。自动计算。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091425/

相关文章:

java - 使用 Seam 拦截 HTTP session 的结束

Android Activity 到 WebView 和 WebView 到 Activity 的参数传递

android - 如何在单个改造调用中解析不同的 xml 数据

android - onTextChanged 事件在 Android 中不起作用

android - 如何将单个 TextWatcher 用于多个 EditText?

Java 验证证书是否与 key 相关联

java - 方法取决于不存在的组 - Testng

java - "derby dialect has been deprecated"

java - Android - 与 SQL 查询作斗争

android - 在文本更改监听器上添加破折号时无法从 EditText 字段中删除文本