未从开关使用android局部变量
为什么我会得到两个警告:变量“input5”未被使用,当我以后打算使用它时:“input5”无法解析为变量 我在两者之间错过了什么?谢谢未从开关使用android局部变量,android,variables,switch-statement,Android,Variables,Switch Statement,为什么我会得到两个警告:变量“input5”未被使用,当我以后打算使用它时:“input5”无法解析为变量 我在两者之间错过了什么?谢谢 final Switch mySwitch = (Switch) findViewById(R.id.edit_home); mySwitch.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { @Override public v
final Switch mySwitch = (Switch) findViewById(R.id.edit_home);
mySwitch.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
**double input5 = 1;**
}else{
**double input5 = 2;**
}
Button buttonForward = (Button) findViewById(R.id.buttonToMain2);
buttonForward.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
EditText edit_team = (EditText) findViewById(R.id.edit_team);
EditText edit_form = (EditText) findViewById(R.id.edit_form);
EditText edit_import = (EditText) findViewById(R.id.edit_import);
String ekipa1 = edit_team.getText().toString();
final double input2 = Double.valueOf(ratingBar.getRating());
final double input3 = Double.valueOf(edit_form.getText().toString());
final double input4 = Double.valueOf(mplayerControl.getProgress());
final double input6 = Double.valueOf(edit_import.getText().toString());
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("Value",input2);
intent.putExtra("Value1",input3);
intent.putExtra("Value2",input4);
intent.putExtra("Value3",**input5**);
intent.putExtra("Value4",input6);
intent.putExtra("team1", ekipa1);
startActivity(intent);
}
});
}
});
将
input5
声明为实例成员
if(isChecked){
**double input5 = 1;**
}else{
**double input5 = 2;**
}
它在if-else块中声明和初始化(输入5是if-else块的本地输入)
如果已经声明为实例成员,则初始化变量input5
if(isChecked){
input5 = 1;
}else{
input5 = 2;
}
变量超出范围。我认为您不需要像现在这样创建onCheckChanged侦听器。创建意图时,可以直接从按钮的onClick侦听器查询开关上的isChecked()函数。所有变量都在一个方法中声明,这意味着只能在此方法中访问它们 因此,input2、Input3、input4和input6只能在onClick()中访问,input5只能在onCheckedChanged()中访问 试试这个:
final Switch mySwitch = (Switch) findViewById(R.id.edit_home);
final double input2 = Double.valueOf(ratingBar.getRating());
final double input3 = Double.valueOf(edit_form.getText().toString());
final double input4 = Double.valueOf(mplayerControl.getProgress());
final double input5 = (mySwitch.isChecked() ? 1.0 : 2.0);
final double input6 = Double.valueOf(edit_import.getText().toString());
你知道什么是变量范围吗?!!!非常感谢你!!!因为一个愚蠢的错误,我用这个开关挣扎了好几天:)@user3041073不客气。将答案标记为“接受”,如果它通过单击“嘀嗒”来帮助,考虑将类变量用作不正确的样式,如果有更多的活动实例,将导致意外的行为。如果要保存此简单组件的状态,应使用实例变量。除此之外,我不会将这个简单的状态存储在变量中,因为组件本身存储它。So-1用于使用类变量。@AlexS。如果你投了反对票,你就错了,应该撤销它。类变量是实例变量,除非将其定义为静态变量。您可以使用Raghundandan声明的
input5
创建此活动的任意多个实例,没有任何副作用。@Alex您正在争论语义问题。如果有人建议static
,我可能会同意你的意见。事实上,提出的解决方案是一种常见模式,没有歧义或副作用。你的否决票不好。