Как взять данные из редактируемого текста и сравнить их со значением счетчика - динамическое обновление? - PullRequest
0 голосов
/ 11 марта 2012

Я пытаюсь сделать простую систему заказов. Таким образом, пользователь выбирает тип бургера из счетчика, затем пользователь может ввести количество, а затем на заднем плане происходит некоторая математика, которая устанавливает текстовое представление внизу с общей ценой. Я не уверен, какой метод я должен использовать, чтобы он динамически обновлялся, когда пользователь изменяет количество текстового представления.

Если я просто скажу, что все гамбургеры имеют 2,50, мне нужен какой-то метод, который говорит, что если / когда данные вводятся в текст редактирования, возьмите эти данные, а затем умножьте их на 2,50 и установите их в представлении общего текста ниже , Я просто не уверен в методической части, поэтому он динамический и будет меняться при изменении количества редактируемого текста.

[код]

package placeorder.com;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

public class Food extends Activity {

    String[] burgersarray, chipsarray, saladarray;
    Random order = new Random();
    double bquantity, hamburger, burgertotal;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.food);

        EditText burgerquantity = (EditText) findViewById(R.id.et_burger);          
        TextView total = (TextView) findViewById(R.id.tv_total);
        Spinner burgers = (Spinner) findViewById(R.id.sp_burgers);      

        burgersarray = getResources().getStringArray(R.array.burgers);
        chipsarray = getResources().getStringArray(R.array.chips);
        saladarray = getResources().getStringArray(R.array.salad);      
        TextView orderid = (TextView) findViewById(R.id.tv_orderid);        

        int randomorder = order.nextInt(9999);
        orderid.setText("Order ID: " + randomorder);        


        ArrayAdapter<String> burgersadapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_dropdown_item, burgersarray);

        burgers.setAdapter(burgersadapter);


        burgers.setOnItemSelectedListener(new OnItemSelectedListener()

        {

            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {

                String burger = (String) arg0.getSelectedItem();    
            }

            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });     





    }



}

[/ код]

1 Ответ

1 голос
/ 11 марта 2012

Вам придется реализовать TextWatcher для вашего EditText.Сначала создайте массив, который будет содержать цены на гамбургеры (отображающие типы гамбургеров из счетчика) и поле int, в котором будет храниться текущий выбор из счетчика:

double[] prices = {1d, 2d, 3d};
int currentSelection = 0;

, затем реализуйте TextWatcher для вашего EditText:

burgerquantity.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            public void afterTextChanged(Editable s) {
                double result = Integer.parseInt(s.toString())
                        * prices[currentSelection]; //obtain the total
                total.setText("" + result); //set the result
            }

Также в вашем слушателе счетчика установите поле currentSelection:

    public void onItemSelected(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    currentSelection = arg2;
//this is needed because the user could enter a value in the EditText but change to another burger category and so you update the total for the new price
                    if (!burgerquantity.getText().toString().equals("")) {
                        double result = Integer.parseInt(burgerquantity.getText()
                                .toString()) * prices[currentSelection];
                        total.setText("" + result);
                    }
                }
            });

ПРИМЕЧАНИЕ. Вам придется позаботиться об исключении, которое можетвозникают при синтаксическом анализе значения из EditText (например, если пользователь вводит значение, а затем удаляет все числа, которые будут иметь исключение, поскольку приложение будет пытаться проанализировать пустую строку)

...