Настройка метода для вызова TextChangedListener - PullRequest
0 голосов
/ 26 мая 2020

-EDIT 5/27 / 2020-

Я продвинулся немного дальше со своим кодом и теперь пытаюсь получить стоимость обновления с помощью 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);
            }
        });
    }
}

1 Ответ

0 голосов
/ 27 мая 2020

Решение!

Изменено сообщение forumla, чтобы складывать вместе двойные значения вместо промежуточных чисел, и добавлено в ловушку исключений, так что 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...