在EditText上使用TextWatcher在android中实时计算总数和总和?

在这里,我想将来自我的数据库和setText的默认值设为该值,并计算净费率和总数,否则,如果用户编辑费率或收费,我想根据该值计算净费率和总额。即时的。

这是我计算和显示值的代码。

private void showItem(String json) { String itembarcode = ""; String itemdesc = ""; String weight = ""; String rate = ""; String making = ""; double wt = 0.0d; double rt = 0.0d; double mk = 0.0d; try { JSONObject jsonObject = new JSONObject(json); JSONArray result = jsonObject.getJSONArray(ParseBarcode.JSON_ARRAY); JSONObject itemData = result.getJSONObject(0); itembarcode = itemData.getString(ParseBarcode.KEY_BARCODE); itemdesc = itemData.getString(ParseBarcode.KEY_DESC); weight = itemData.getString(ParseBarcode.KEY_WEIGHT); rate = itemData.getString(ParseBarcode.KEY_RATE); making = itemData.getString(ParseBarcode.KEY_MAKING); } catch (JSONException e) { e.printStackTrace(); } //table started TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); TableRow.LayoutParams rowParams = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f); rowParams.setMargins(16, 0, 16, 0); TableLayout tableLayout = new TableLayout(AddInvEst.this); tableLayout.setLayoutParams(tableParams); TableRow newRow = new TableRow(AddInvEst.this); newRow.setLayoutParams(tableParams); TextView barCode = new TextView(AddInvEst.this); barCode.setLayoutParams(rowParams); barCode.setGravity(Gravity.CENTER); TextView itemDesc = new TextView(AddInvEst.this); itemDesc.setLayoutParams(rowParams); itemDesc.setGravity(Gravity.CENTER); TextView weightLine = new TextView(AddInvEst.this); weightLine.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.75f)); weightLine.setGravity(Gravity.CENTER); EditText rateAmount = new EditText(AddInvEst.this); rateAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); rateAmount.setGravity(Gravity.CENTER); // String rtAmt = rateAmount.getText().toString().trim(); EditText makingAmount = new EditText(AddInvEst.this); makingAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); makingAmount.setGravity(Gravity.CENTER); //String mkAmt = makingAmount.getText().toString().trim(); TextView netRate = new TextView(AddInvEst.this); netRate.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); netRate.setGravity(Gravity.CENTER); TextView itemtotal = new TextView(AddInvEst.this); itemtotal.setLayoutParams(rowParams); itemtotal.setGravity(Gravity.CENTER); wt = Double.parseDouble(weight); rt = Double.parseDouble(rate); mk = Double.parseDouble(making); double NetRate = rt + mk; double Total = (NetRate / 10) * wt; barCode.setText(itembarcode); itemDesc.setText(itemdesc); weightLine.setText(weight); rateAmount.setText(rate); makingAmount.setText(making); netRate.setText(NetRate + ""); itemtotal.setText(Total + ""); newRow.addView(barCode); newRow.addView(itemDesc); newRow.addView(weightLine); newRow.addView(rateAmount); newRow.addView(makingAmount); newRow.addView(netRate); newRow.addView(itemtotal); itemTable.addView(newRow); } 

使用此代码我能够计算净费率和总数,但我想将双倍数值舍入到4个小数点。我如何实时计算所有总数的总和。非常感谢。谢谢提前。 这是我的xml代码。

下面不是完整的代码,但这将给出实现的概念。 您必须创建一个新的计算方法并显示结果 –

 private void calculateAndShow(long wt, long rt, long mk){ double NetRate = rt + mk; double Total = (NetRate / 10) * wt; // Change the value here barCode.setText(itembarcode); itemDesc.setText(itemdesc); weightLine.setText(weight); rateAmount.setText(rate); makingAmount.setText(making); netRate.setText(NetRate + ""); itemtotal.setText(Total + ""); } 

现在在方法之外添加这些行 –

  private TextWatcher rateTextWatcher = 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) { String rate = rateAmount.getText().toString(); newRate = Double.parseDouble(rate); calculateAndShow(wt, newRate, mk); } }; private TextWatcher makingAmountTextWatcher = 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) { String makingAmount = makingAmount.getText().toString(); newMK = Double.parseDouble(makingAmount); calculateAndShow(wt, rt, newMK); } }; 

这些textwatcher就像你的编辑文本一样 –

 EditText rateAmount = new EditText(AddInvEst.this); rateAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); rateAmount.setGravity(Gravity.CENTER); rateAmount.addTextChangedListener(rateTextWatcher); EditText makingAmount = new EditText(AddInvEst.this); makingAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); makingAmount.setGravity(Gravity.CENTER); makingAmount.addTextChangedListener(makingAmountTextWatcher);