希望能够在最后创建一个变量,该变量具有我最终将在 TextView 中显示的时间和成本值。不过我的整数遇到了问题。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final int intTime = 30;
final int intCost = 10;
CheckBox CP = (CheckBox)findViewById(R.id.checkPepperoni);
CheckBox CS = (CheckBox)findViewById(R.id.checkSausage);
CheckBox CB = (CheckBox)findViewById(R.id.checkBacon);
CheckBox CM = (CheckBox)findViewById(R.id.checkMushroom);
final ImageView cheese =(ImageView)findViewById(R.id.imgCheese);
final ImageView pepperoni =(ImageView)findViewById(R.id.imgPepperoni);
final ImageView sausage =(ImageView)findViewById(R.id.imgSausage);
final ImageView bacon =(ImageView)findViewById(R.id.imgBacon);
final ImageView mushroom =(ImageView)findViewById(R.id.imgMushroom);
final SharedPreferences sharedPref =PreferenceManager.getDefaultSharedPreferences(this);
CP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
//Pepperoni Listener
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked1) {
// TODO Auto-generated method stub
if(isChecked1){
pepperoni.setImageResource(R.drawable.pepperoni);
intTime = intTime + 6;
intCost = intCost + 5;
}
else{
pepperoni.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;
}
}});
CS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
//Sausage Listener
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked2) {
// TODO Auto-generated method stub
if(isChecked2){
sausage.setImageResource(R.drawable.sausage);
intTime = intTime + 6;
intCost = intCost + 5;
}
else{
sausage.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;
}
}});
CB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked3) {
// TODO Auto-generated method stub
if(isChecked3){
bacon.setImageResource(R.drawable.bacon);
intTime = intTime + 6;
intCost = intCost + 5;
}
else{
bacon.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;
}
}});
CM.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked4) {
// TODO Auto-generated method stub
if(isChecked4){
mushroom.setImageResource(R.drawable.mushroom);
intTime = intTime + 6;
intCost = intCost + 5;
}
else{
mushroom.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;
}
}});
ImageButton IB = (ImageButton)findViewById(R.id.imgBtnGo);
IB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String time = Integer.toString(intTime);
String cost = Integer.toString(intCost);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("keyTime", time);
editor.putString("keyCost", cost);
startActivity(new Intent(MainActivity.this, ResultActivity.class));
}
});
}
}
我遇到的错误是“无法分配最终局部变量 intCost,因为它是在封闭类型中定义的。”
这是什么意思,有什么方法可以使用所有复选框来更改此变量?
最佳答案
问题的原因是final
变量在声明时就应该初始化,不能重新赋值。对于这种情况,最好的办法是在匿名类中创建以最终变量值开头的内部字段,并且该内部字段会定期更新。
例子:
CP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//Pepperoni Listener
int innerTime = intTime;
int innerCost = intCost;
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked1) {
if(isChecked1) {
pepperoni.setImageResource(R.drawable.pepperoni);
innerTime += 6;
innerCost += 5;
} else {
pepperoni.setImageResource(0);
innerTime -= 6;
innerCost -= 5;
}
}
});
更多信息:
关于java - final 局部变量不能赋值,因为它是在封闭类型中定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176123/