Android 内部类中的最终变量问题
你能告诉我这里的错误是什么吗?它告诉我吐司制作中的“性别”必须设置为final,但当我设置为final时,if语句抱怨它不应该是finalAndroid 内部类中的最终变量问题,android,null,Android,Null,你能告诉我这里的错误是什么吗?它告诉我吐司制作中的“性别”必须设置为final,但当我设置为final时,if语句抱怨它不应该是final @Override protected void onCreate(Bundle savedInstanceState) { String gender = null; Toast.makeText(this, R.string.ok, Toast.LENGTH_LONG).show(); super.onCreate(savedInst
@Override
protected void onCreate(Bundle savedInstanceState) {
String gender = null;
Toast.makeText(this, R.string.ok, Toast.LENGTH_LONG).show();
super.onCreate(savedInstanceState);
setContentView(R.layout.createprofile);
RadioButton rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
String male=rb_male.getText().toString();
RadioButton rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
String female=rb_male.getText().toString();
if(rb_male.isChecked()) { gender = "male";}
if(rb_female.isChecked()){ gender = "female";}
Button checkgender = (Button) findViewById(R.id.gendercheck);
checkgender.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
}
});
}
}
错误是:
Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
应该是
Toast.makeText(v.getContext(), gender.toString(), Toast.LENGTH_LONG).show();
您还可以将性别设置为类范围变量,以便使用setter/getter访问它。错误为:
Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG);
应该是
Toast.makeText(v.getContext(), gender.toString(), Toast.LENGTH_LONG).show();
您还可以将性别设置为类作用域变量,以便可以使用setter/getter访问该变量
public void onClick(View v) {
Toast.makeText(ProfileActivity.this, gender.toString(),
Toast.LENGTH_LONG).show();
}
});
onclick toast中缺少您的.show():
public void onClick(View v) {
Toast.makeText(ProfileActivity.this, gender.toString(),
Toast.LENGTH_LONG).show();
}
});
无法从内部类访问局部非最终变量。一个简单的解决方法是在设置性别的初始值后,使用另一个最终变量。这样做:
if(rb_male.isChecked()) { gender = "male";}
if(rb_female.isChecked()){ gender = "female";}
final String finalGender = gender;
后来
Toast.makeText(ProfileActivity.this, finalGender.toString(), Toast.LENGTH_LONG).show();
还有其他方法,但这是最快的。您不能从内部类访问局部非最终变量。一个简单的解决方法是在设置性别的初始值后,使用另一个最终变量。这样做:
if(rb_male.isChecked()) { gender = "male";}
if(rb_female.isChecked()){ gender = "female";}
final String finalGender = gender;
后来
Toast.makeText(ProfileActivity.this, finalGender.toString(), Toast.LENGTH_LONG).show();
还有其他方法,但这是最快的。你有太多的错误,无法完全解决。这些措施包括:
if
语句必须位于方法onClick(v)内。如果它们在外部,那么单击并不会导致重新评估它们,并且对按钮的任何更改都不会改变您得到的结果李>
gender
已经是一个字符串,gender.toString()
不做任何更改李>
String gender = null;
RadioButton rb_male;
RadioButton rb_female;
Button checkgender;
@Override
protected void onCreate(Bundle savedInstanceState) {
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
checkgender = (Button) findViewById(R.id.gendercheck);
checkgender.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (rb_male.isChecked()) {
gender = "male";
}
if (rb_female.isChecked()) {
gender = "female";
}
Toast.makeText(AndroidTest.this, (CharSequence) gender, Toast.LENGTH_LONG).show();
}
});
}
}您的错误太多,无法完全解决。这些措施包括:
if
语句必须位于方法onClick(v)内。如果它们在外部,那么单击并不会导致重新评估它们,并且对按钮的任何更改都不会改变您得到的结果李>
gender
已经是一个字符串,gender.toString()
不做任何更改李>
String gender = null;
RadioButton rb_male;
RadioButton rb_female;
Button checkgender;
@Override
protected void onCreate(Bundle savedInstanceState) {
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
rb_male = (RadioButton) findViewById(R.id.maleradiobutton);
rb_female = (RadioButton) findViewById(R.id.femaleradiobutton);
checkgender = (Button) findViewById(R.id.gendercheck);
checkgender.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (rb_male.isChecked()) {
gender = "male";
}
if (rb_female.isChecked()) {
gender = "female";
}
Toast.makeText(AndroidTest.this, (CharSequence) gender, Toast.LENGTH_LONG).show();
}
});
}
}它仍然会给我同样的错误,基本上您所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量genderIt的定义,它仍然给我同样的错误,基本上你所做的是添加.show(),但我的问题与GUI无关。。这是关于变量性别的定义,小修正,非最终局部变量(在方法中定义)。可以访问非最终实例变量。谢谢,它运行了,但是toast一直在给我“男性”这个词!你能更正一下吗?因为我还是看不出错误。我提供的代码是正确的。如果总是得到“male”,则表示rb_male.isChecked()总是返回true。要确保这一点,只需在使用log.d设置后记录值(“CheckGender”,“Gender is”+Gender);消息将在LogCat控制台中打印。我使用性别或最终性别进行日志记录(当我使用性别进行日志记录时,会给出最终错误)?小修正,非最终局部变量(在方法中定义)。可以访问非最终实例变量。谢谢,它运行了,但是toast一直在给我“男性”这个词!你能更正一下吗?因为我还是看不出错误。我提供的代码是正确的。如果总是得到“male”,则表示rb_male.isChecked()总是返回true。要确保这一点,只需在使用log.d设置后记录值(“CheckGender”,“Gender is”+Gender);消息将在LogCat控制台中打印。我使用性别或最终性别进行日志记录(使用性别进行日志记录时,会给出最终错误)?