首页 > 解决方案 > 如何在切换按钮中使用类中的变量

问题描述

我在 android studio 中编写了一段非常简单的代码来告诉我我每周会得到多少报酬,因为为什么不呢。无论如何,我在其上添加了一个“超时”切换按钮,但我不太确定如何在 switch 语句中使用 MainActivity 中的变量。Variable 'hoursWorked' is accessed from within inner class, needs to be declared final. 任何想法如何做到这一点?

public class MainActivity extends AppCompatActivity {

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


        Button calcButton = (Button) findViewById(R.id.calcButton);
        calcButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText hourlyWageNum = (EditText) findViewById(R.id.hourlyWageNum);
                EditText hoursWorkedNum = (EditText) findViewById(R.id.hoursWorkedNum);
                TextView resultText = (TextView) findViewById(R.id.resultText);
                Switch overtimeSwitch = (Switch) findViewById(R.id.overtimeSwitch);

                double hourlyWage = Double.parseDouble(hourlyWageNum.getText().toString());
                double hoursWorked = Double.parseDouble(hoursWorkedNum.getText().toString());
                double preTax;

                overtimeSwitch.setChecked(true);
                overtimeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
                        if(isChecked){
                            if(hoursWorked > 40){
                                preTax = (40 * hourlyWage) + ((hoursWorked - 40) * hourlyWage * 1.5); // these variables
                            } else{
                                preTax = hourlyWage * hoursWorked; // these variables
                            }
                        }else{
                            preTax = hourlyWage * hoursWorked; // these variables
                        }
                    }
                });

                double postTax = preTax - preTax * 0.076;
                NumberFormat formatter = NumberFormat.getCurrencyInstance();
                resultText.setText(formatter.format(postTax));


标签: javaandroid

解决方案


我认为你试图用开关按钮实现的是在开关打开的情况下计算税前。如果开关打开,您应该计算其中的预税,而不是在 calcButton 单击侦听器上设置开关的侦听器。请参阅下面的示例代码,我还进行了一些小改动以使逻辑更短。

替换这个:

  overtimeSwitch.setChecked(true);
  overtimeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
          if(isChecked){
              if(hoursWorked > 40){
                  preTax = (40 * hourlyWage) + ((hoursWorked - 40) * hourlyWage * 1.5); // these variables
              } else{
                  preTax = hourlyWage * hoursWorked; // these variables
              }
         }else{
             preTax = hourlyWage * hoursWorked; // these variables
         }
      }
 });

有了这个。

double pretax = 0.0;
Boolean isSwitchOn = overtimeSwitch.isChecked();

if (isSwitchOn && hoursWorked > 40) { // compute the pretax
    preTax = (40 * hourlyWage) + ((hoursWorked - 40) * hourlyWage * 1.5);
} else {
   preTax = hourlyWage * hoursWorked;
}

推荐阅读