繁体   English   中英

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

[英]Using a TextWatcher on a EditText to calculate the total and sum total in real time in 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM