繁体   English   中英

设置由 TextChangedListener 调用的方法

[英]Setting up a method to be called by a TextChangedListener

-编辑 2020 年 5 月 27 日-

我的代码进一步进步了一点,现在我正在尝试使用 onTextChangedListener 获取更新的成本。 它似乎在做它的工作,但它总是对每个值使用 int 0,即使在它改变之后,你也可以看到值被“刷新”。 我希望我的代码中有一些我没有发现的问题。 我期待大家的意见。

        final Button bContinue = findViewById(R.id.bContinue);
        final EditText etHamburger = findViewById(R.id.etHamburger);
        final EditText etHotdog = findViewById(R.id.etHotdog);
        final EditText etDrink = findViewById(R.id.etDrink);
        final EditText etSpecialInstructions = findViewById(R.id.etSpecialInstructions);
        final EditText tvCost = findViewById(R.id.tvCost);

        etHamburger.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) {
                int Hamburger;
                try {
                    Hamburger = Integer.parseInt(String.valueOf(etHamburger));
                } catch (NumberFormatException e) {
                    Hamburger = 0;
                }
                int Hotdog;
                try {
                    Hotdog = Integer.parseInt(String.valueOf(etHotdog));
                } catch (NumberFormatException e) {
                    Hotdog = 0;
                }
                int Drink;
                try {
                    Drink = Integer.parseInt(String.valueOf(etDrink));
                } catch (NumberFormatException e) {
                    Drink = 0;
                }
                int cost = Hamburger + Drink + Hotdog;
                String message = "Total Cost $ " + cost;
                tvCost.setText(message);
            }
        });
        bContinue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent OrderIntent = new Intent(order.this, ContactInfo.class);
                OrderIntent.putExtra("etHamburger", String.valueOf(etHamburger));
                OrderIntent.putExtra("etHotdog", String.valueOf(etHotdog));
                OrderIntent.putExtra("etDrink", String.valueOf(etDrink));
                OrderIntent.putExtra("etSpecialInstructions", (Parcelable) etSpecialInstructions);
                OrderIntent.putExtra("tvCost", (Parcelable) tvCost);
                order.this.startActivity(OrderIntent);
            }
        });
    }
}

-原始问题和代码-

我无法让这段代码正常工作,我一直在寻找解决方案,但似乎找不到。 这是我的代码。 我只是想得到它,以便我的 TextChangedListener 在用户更改数量后激活一种方法来重新计算总数。 我搜索了其他帖子以找到我的答案,但没有看到我在寻找什么,但我对此也很陌生。 目前我在创建方法时遇到问题,我的 TextChangedListener 似乎正在工作。

package com.example.foodordering;

import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.GetChars;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.TextView;

public class order extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);


        final Button bContinue = findViewById(R.id.bContinue);
        final EditText etHamburger = findViewById(R.id.etHamburger);
        final EditText etHotdog = findViewById(R.id.etHotdog);
        final EditText etDrink = findViewById(R.id.etDrink);
        final EditText etSpecialInstructions = findViewById(R.id.etSpecialInstructions);
        final EditText tvCost = findViewById(R.id.tvCost);


        public void calculate(){

            int Hamburger;
            try {
                Hamburger = Integer.parseInt(String.valueOf(etHamburger));
            } catch (NumberFormatException e) {
                Hamburger = 0;
            }
            int Hotdog;
            try {
                Hotdog = Integer.parseInt(String.valueOf(etHotdog));
            } catch (NumberFormatException e) {
                Hotdog = 0;
            }
            int Drink;
            try {
                Drink = Integer.parseInt(String.valueOf(etDrink));
            } catch (NumberFormatException e) {
                Drink = 0;
            }
            int cost = Hamburger + Hotdog + Drink;
            String message = "Order Total $" + cost;
            tvCost.setText(message);
        }

        etHamburger.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) {
                calculate();
            }
        });
        bContinue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent OrderIntent = new Intent(order.this, ContactInfo.class);
                OrderIntent.putExtra("etHamburger", (Parcelable) etHamburger);
                OrderIntent.putExtra("etHotdog", (Parcelable) etHotdog);
                OrderIntent.putExtra("etDrink", (Parcelable) etDrink);
                OrderIntent.putExtra("etSpecialInstructions", (Parcelable) etSpecialInstructions);
                order.this.startActivity(OrderIntent);
            }
        });
    }
}

解决方案!

将消息论坛更改为将双精度值而不是整数相加并添加到异常捕获器中,因此 null = 0 而不是 null。

您可以将此代码与初始问题代码进行比较以查看更改。

这基本上会在您对 EditText 框进行更改时自动更新总量,从而实现即时更新。

希望这对将来的某人有所帮助。

package com.example.foodordering;

import android.content.Intent;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class order extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);

        final Button bContinue = findViewById(R.id.bContinue);
        final EditText etHamburger = findViewById(R.id.etHamburger);
        final EditText etHotdog = findViewById(R.id.etHotdog);
        final EditText etDrink = findViewById(R.id.etDrink);
        final TextView tvCost = findViewById(R.id.tvCost);
        final EditText etSpecialInstructions = findViewById(R.id.etSpecialInstructions);

        etHamburger.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable arg0) {
            }
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                calculate();
            }
        });
        etHotdog.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable arg0) {
            }
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                calculate();
            }
        });
        etDrink.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable arg0) {
            }
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            }
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                calculate();
            }
        });
        bContinue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent OrderIntent = new Intent(order.this, ContactInfo.class);
                OrderIntent.putExtra("etHamburger", String.valueOf(etHamburger));
                OrderIntent.putExtra("etHotdog", String.valueOf(etHotdog));
                OrderIntent.putExtra("etDrink", String.valueOf(etDrink));
                OrderIntent.putExtra("etSpecialInstructions", (Parcelable) etSpecialInstructions);
                OrderIntent.putExtra("tvCost", (Parcelable) tvCost);
                order.this.startActivity(OrderIntent);
            }
        });
    }
    private void calculate(){
        final EditText etHamburger = findViewById(R.id.etHamburger);
        final EditText etHotdog = findViewById(R.id.etHotdog);
        final EditText etDrink = findViewById(R.id.etDrink);
        final TextView tvCost = findViewById(R.id.tvCost);

        String etHamburgerStr = etHamburger.getText().toString();
        String etHotdogStr = etHotdog.getText().toString();
        String etDrinkStr = etDrink.getText().toString();
        double etHamburgerDbl;
        try {
            etHamburgerDbl = Double.parseDouble(etHamburgerStr);
        } catch (NumberFormatException e) {
            etHamburgerDbl = 0;
        }
        double etHotdogDbl;
        try {
            etHotdogDbl = Double.parseDouble(etHotdogStr);
        } catch (NumberFormatException e) {
            etHotdogDbl = 0;
        }
        double etDrinkDbl;
        try {
            etDrinkDbl = Double.parseDouble(etDrinkStr);
        } catch (NumberFormatException e) {
            etDrinkDbl = 0;
        }
        double cost = (etHamburgerDbl + etDrinkDbl + etHotdogDbl);
        String costmessage = "Total Cost $" + cost;
        tvCost.setText(costmessage);
    }
}

暂无
暂无

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

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