Как использовать переменные из класса в кнопке переключения - PullRequest
0 голосов
/ 11 июля 2020

Я пишу очень простой фрагмент кода в студии android, чтобы просто сказать мне, сколько мне будут платить каждую неделю, почему бы и нет. В любом случае я добавил на него кнопку переключения «сверхурочно», и я не совсем уверен, как использовать переменные из 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));


1 Ответ

1 голос
/ 11 июля 2020

Я думаю, что вы пытаетесь достичь с помощью кнопки переключения, так это вычислить предварительный налог, если переключатель включен. Вместо того, чтобы устанавливать прослушиватель переключателя на прослушиватель щелчков calcButton, вы должны вычислить предварительный налог внутри него, если переключатель включен. См. Пример кода ниже. Я также внес некоторые незначительные изменения, чтобы сделать logi c короче.

Замените это:

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