自动检查和计算不起作用

时间:2014-07-01 23:57:01

标签: java android

我正在创建一个PV = nRT计算器,让用户输入三个给定变量中的任何一个。如果不使用按钮,程序将自动检测到已经给出了三个变量,并自动计算第四个缺失变量。到目前为止,这是我的代码:

    Thread calculate = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                if (Calculations.isCalcable(pressure.getText().toString(),
                        volume.getText().toString(),
                        moles.getText().toString(),
                        temperature.getText().toString()) == true) {
                    if (pressure.getText().toString().length() == 0) {
                        pressure.setText("1010");
                    } else if (volume.getText().toString().length() == 0) {
                        volume.setText("1010");
                    } else if (moles.getText().toString().length() == 0) {
                        moles.setText("1010");
                    } else {
                        temperature.setText("1010");
                    }


                }
            } catch (Exception e){

            }
        }
    });
    calculate.start();

这不起作用。此外,我不确定我是否真的应该使用线程。这是当我输入三个变量时发生的事情(R变量是一个常数):

Imgur

在这种情况下,温度文本应该已更改为“1010”。

这是我的isCalcable类:

public class Calculations {
    public static boolean isCalcable (String pressure, String volume, String moles, String temperature){
        int hasNumber = 0;
        if (pressure.length() > 0){
            hasNumber++;
        }
        if (volume.length() > 0){
            hasNumber++;
        }
        if (moles.length() > 0){
            hasNumber++;
        }
        if (temperature.length() > 0){
            hasNumber++;
        }
        if (hasNumber == 3){
            return true;
        }
        return false;
    }
}

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您需要检测是否已输入值 文字字段对吗?那你看过TextWatcher了吗? 关于如何使用它的Here is an example

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        //code
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //code
    }

    @Override
    public void afterTextChanged(Editable s) {
        //code
    }
});

基本上,您将TextWatcher应用于三个字段并观察。 如果所有三个字段都具有您需要的值,则进行计算。

也许你可以在活动中添加全局变量,并在文本字段的onTextChanged()方法中检查这些全局变量,如果其中三个变量已经完成,则设置第四个变量的值。