java - 如何在切换按钮中使用类中的变量
问题描述
我在 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));
解决方案
我认为你试图用开关按钮实现的是在开关打开的情况下计算税前。如果开关打开,您应该计算其中的预税,而不是在 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;
}
推荐阅读
- javascript - 在 iOS <12 上无法以编程方式触发输入点击
- python - Django显示一个用视图创建的png
- css - Webcomponents css类在插槽中不可用
- android - 如何使此联系表格工作在手机上打开邮件客户端?
- dart - Angular Dart:我们如何将对象迭代到 html 中?
- php - AWS Translate Php sdk 缺少字段,但文档中没有请求
- ss - 尝试使用 JavaScript 自动化网站上的报告过程
- c++ - 如何在一个for循环中迭代两个向量?
- python - 我可以使用 GET api 调用并传递标头中的值并在 python 中接收响应吗?
- sql - 在 SQL Server 查询中使用联合时出错