我正在编写一个包含多个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);
}
}
});