switch语句只递增一次

时间:2015-10-18 18:28:24

标签: java android button switch-statement increment

我正在为学校创建一个咖啡订购应用程序。我对下面代码的意图是根据是否单击subtractCoffeeButton或addCoffeeButton来递增或递减咖啡整数。 coffeeTV用于向用户显示排队等待订购的咖啡的数量。 subtotal和subtotalTV用于保存价格并将其显示给用户。

实际上,subtractCoffee和addCoffee按钮用于将咖啡和咖啡电视从0增加到1,反之亦然,小计和小计电视也适用于显示0.00和2.5,但它不会增加任何进一步的增量。当预计将咖啡增加到2,3,4等时,进一步的按钮点击不会发生任何事情。小计为5.00,7.50,10.00等。

代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

        Button subtractCoffee = (Button) findViewById(R.id.subtractCoffeeButton);
        subtractCoffee.setOnClickListener(this);

        Button addCoffee = (Button) findViewById(R.id.addCoffeeButton);
        addCoffee.setOnClickListener(this);

}



    @Override
    public void onClick(View v) {
    double subtotal = 0.00;

    int coffee = 0;


    double coffeePrice = 2.50;

    TextView coffeeTV = (TextView) findViewById(R.id.tvCoffeeOrder);
    String coffeeString = coffeeTV.getText().toString();
    int coffeeTracker = Integer.parseInt(coffeeString);

    TextView subTotalTV = (TextView) findViewById(R.id.tvSubtotalCost);


    switch (v.getId()) {
        case R.id.subtractCoffeeButton:
            if (coffeeTracker == 0) {
                break;
            } else if (coffeeTracker == 1) {
                coffee = 0;
                coffeeTracker = 0;
                coffeeTV.setText(Integer.toString(coffee));
                break;
            } else {
                coffee = coffee - 1;
                coffeeTV.setText(Integer.toString(coffee));
                subtotal = subtotal - coffeePrice;
                subTotalTV.setText(Double.toString(subtotal));
            }
            break;
        case R.id.addCoffeeButton:
            coffee += 1;
            coffeeTracker+=1;
            coffeeTV.setText(Integer.toString(coffee));
            subtotal = subtotal + coffeePrice;
            subTotalTV.setText(Double.toString(subtotal));
            break;
    }

}

5 个答案:

答案 0 :(得分:2)

,因为

double subtotal = 0.00;
int coffee = 0;
double coffeePrice = 2.50;

位于您方法的本地范围内。声明为成员变量,只要当前活动未被销毁,它们的值就会持续

答案 1 :(得分:2)

@Override
public void onClick(View v) {
double subtotal = 0.00;
int coffee = 0;
double coffeePrice = 2.50;

这些变量必须在onClick方法之外。 每当你打电话给onClick时,它们都会以0开始。

答案 2 :(得分:1)

问题是你有

double subtotal = 0.00;
int coffee = 0;

在onClick()函数的开头。因此,每次单击按钮时,都会将数字重置为0,然后将其增加到1.

此外,我建议您定义单独的OnClickListener而不是全局的OnClickListener。类似的东西:

public class MainActivity extends AppCompatActivity {

    AppWidgetManager appWidgetManager;
    SharedPreferences preferences;
    SharedPreferences.Editor editor;
    InputMethodManager inputMethodManager;

    EditText mainEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            ActivityManager.TaskDescription taskDescription =
                    new ActivityManager.TaskDescription(null, null, getResources().getColor(R.color.primaryDark));
            setTaskDescription(taskDescription);
            getWindow().setNavigationBarColor(getResources().getColor(R.color.primary));
        }

        appWidgetManager = AppWidgetManager.getInstance(this);
        inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

        preferences = PreferenceManager.getDefaultSharedPreferences(this);
        editor = preferences.edit();
        String savedText = preferences.getString("mainText", "");

        mainEditText = (EditText) findViewById(R.id.mainEditText);
        mainEditText.setMovementMethod(new ScrollAndSelectMovingMethod());
        mainEditText.getText().append(savedText);
        Selection.setSelection(mainEditText.getText(), savedText.length());

        mainEditText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                inputMethodManager.showSoftInput(mainEditText, InputMethodManager.SHOW_IMPLICIT);
            }
        });

        mainEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                onEditTextTextChanged(charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });
    }

    @Override
    public void onBackPressed() {
        finish();
    }

    private void onEditTextTextChanged(String text) {
        saveText(text);
        updateWidget();
    }

    private void saveText(String text) {
        editor.putString("mainText", text);
        editor.commit();
    }

    private void updateWidget() {
        int[] ids = appWidgetManager.getAppWidgetIds(new ComponentName(this, Widget.class));
        for (int id : ids)
            Widget.updateAppWidget(appWidgetManager, id);
    }
}

答案 3 :(得分:0)

您可以使用其他答案方法(字段变量),也可以阅读并解析每个onClick()上的金额。在代码中它看起来像:

static final double COFFEE_PRICE = 2.50;

@Override
public void onClick(View v) {
    TextView coffeeTV = (TextView) findViewById(R.id.tvCoffeeOrder);
    String coffeeString = coffeeTV.getText().toString();
    int coffee = Integer.parseInt(coffeeString);

    TextView subtotalTV = (TextView) findViewById(R.id.tvSubtotalCost);
    String subtotalString = subtotalTV.getText().toString();
    double subtotal = Double.parseDouble(subtotalString);

    switch (v.getId()) {
        case R.id.subtractCoffeeButton:
            if (coffee == 0) {
                break;
            }
            coffee--;
            subtotal -= COFFEE_PRICE;
            coffeeTV.setText(Integer.toString(coffee));
            subtotalTV.setText(Double.toString(subtotal));
            break;
        case R.id.addCoffeeButton:
            coffee++;
            subtotal += COFFEE_PRICE;
            coffeeTV.setText(Integer.toString(coffee));
            subtotalTV.setText(Double.toString(subtotal));         
            break;
     }
}

答案 4 :(得分:0)

正如已经说过的小计,coffe和coffePrice需要在onClick函数之外。另外,就我所见,coffeTracker应始终与coffe相同,因此您不需要变量

这应该是你的代码:

{{1}}