使用TextWatcher在EditTexts之间传递数据

时间:2017-05-16 07:14:46

标签: android textwatcher

我正在编写一个包含多个EditText字段的Android应用,这些字段可以动态计算彼此的总和,差异和产品。

例如,订单总数,收到的金额和提示EditText。提示将计算为tip = amountReceived - orderTotal

我还有一份GasTeimrsersement EditText。我创建了一个sharedPreferences的实例,可以选择按里程付款,也可以选择由司机付款。

但是,虽然我的所有计算都运行正常,但我尝试在名为EditText的{​​{1}}字段中显示最终总值。

我的代码如下:

GrandTotal

当我以某种方式输入数据时,一切正常。

应用程序将计算提示,然后将该总额添加到交付费用(或气体报销),从而产生grandTotal。这是首先输入订单总数,然后输入收到的金额的结果,这将正确显示其余字段。

但是,当首先输入订单总额和小费时,收到的金额将相应更新,并且运费(燃气补偿)将显示为运费和GrandTotal,而不是向小费添加运费。提前感谢任何能告诉我自己做错事的人。

编辑:eTotalCost,eAmountReceived,eTip,eMileage和eGrandTotal都是对我的EditText字段的引用。我将变量命名为相同,但使用" s"而不是" e"当我把它们转换成字符串时。任何变量都带有" d"前面是变量的双重形式来做计算。 dRatePerMile是我通过共享首选项传递的变量,因此用户可以从设置菜单中选择他们获得的每英里数量。 dMultiply是我用来存储计算结果的变量,它是用户驾驶的里程数的EditText,乘以他们在设置菜单中选择的报销金额。

以下是我的完整代码:(对不起,如果时间太长)

if (ratePerMile.equals("") && !ratePerDelivery.equals(""))
    {
        eMileage.setText(ratePerDelivery);
    }

    else
    {
        eMilesDriven.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after){}

            @Override
            public void onTextChanged(CharSequence s, int start,
                                      int before, int count){}

            @Override
            public void afterTextChanged(Editable s)
            {
                if (getCurrentFocus() == eMilesDriven)
                {
                    sAmountReceived = eAmountReceived.getText().toString();
                    sTotalCost = eTotalCost.getText().toString();
                    sMileage = eMileage.getText().toString();
                    sTip = eTip.getText().toString();

                    try
                    {
                        milesDriven = eMilesDriven.getText().toString();
                        dMilesDriven = Double.parseDouble(milesDriven);
                        dRatePerMile = Double.parseDouble(ratePerMile);
                        dMultiply = dRatePerMile * dMilesDriven;
                        dGrandTotal = dTip + dMultiply;
                    } catch(NumberFormatException e){}

                    sMileage = String.valueOf(dMultiply);

                    DecimalFormat df = new DecimalFormat("0.00");
                    sMileage = df.format(dMultiply);

                    eMileage.setText(sMileage);

                    sGrandTotal = String.valueOf(dGrandTotal);
                    sGrandTotal = df.format(dGrandTotal);
                    eGrandTotal.setText(sGrandTotal);
                }
            }
        });

0 个答案:

没有答案