Java 无法引用局部变量
我是Android编程的新手,我想在点击一个按钮时做一些事情。以下是我到目前为止所做的:Java 无法引用局部变量,java,android,Java,Android,我是Android编程的新手,我想在点击一个按钮时做一些事情。以下是我到目前为止所做的: public class MainActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_main); Button button = (Button) findV
public class MainActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Spinner s1,s2,s3,s4,s5,s6,s7;
TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
EditText ed1;
s7 = (Spinner) findViewById(R.id.spinner7);
s1 = (Spinner) findViewById(R.id.spinner1);
s2 = (Spinner) findViewById(R.id.spinner2);
s3 = (Spinner) findViewById(R.id.spinner3);
s4 = (Spinner) findViewById(R.id.spinner4);
s5 = (Spinner) findViewById(R.id.spinner5);
s6 = (Spinner) findViewById(R.id.spinner6);
txt4 = (TextView) findViewById(R.id.textView4);
txt3 = (TextView) findViewById(R.id.textView3);
txt5 = (TextView) findViewById(R.id.textView5);
txt6 = (TextView) findViewById(R.id.textView6);
txt7 = (TextView) findViewById(R.id.textView7);
txt8 = (TextView) findViewById(R.id.textView8);
txt9 = (TextView) findViewById(R.id.textView9);
ed1 = (EditText) findViewById(R.id.editText1);
s7.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val = s7.getSelectedItem().toString();
txt4.setText(val);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s2.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val2 = s2.getSelectedItem().toString();
txt5.setText(val2);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s3.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val3 = s3.getSelectedItem().toString();
txt6.setText(val3);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s1.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val1 = s1.getSelectedItem().toString();
txt3.setText(val1);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s5.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val5 = s5.getSelectedItem().toString();
txt7.setText(val5);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s6.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val6 = s6.getSelectedItem().toString();
txt8.setText(val6);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s4.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val7 = s4.getSelectedItem().toString();
txt9.setText(val7);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}} //Syntax error, insert ";" to complete Statement
}}
公共类MainActivity扩展活动{
创建时受保护的空隙(捆绑冰柱){
超级冰柱;
setContentView(R.layout.activity_main);
按钮按钮=(按钮)findViewById(R.id.button1);
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
旋转器s1、s2、s3、s4、s5、s6、s7;
TextView txt3、txt4、txt5、txt6、txt7、txt8、txt9;
编辑文本ed1;
s7=(喷丝器)findViewById(R.id.喷丝器7);
s1=(喷丝器)findViewById(R.id.spinner1);
s2=(喷丝器)findViewById(R.id.喷丝器2);
s3=(喷丝器)findViewById(R.id.spinner3);
s4=(喷丝器)findViewById(R.id.喷丝器4);
s5=(喷丝器)findViewById(R.id.喷丝器5);
s6=(喷丝器)findViewById(R.id.喷丝器6);
txt4=(TextView)findViewById(R.id.textView4);
txt3=(TextView)findViewById(R.id.textView3);
txt5=(TextView)findViewById(R.id.textView5);
txt6=(TextView)findViewById(R.id.textView6);
txt7=(TextView)findViewById(R.id.textView7);
txt8=(TextView)findViewById(R.id.textView8);
txt9=(TextView)findViewById(R.id.textView9);
ed1=(EditText)findViewById(R.id.editText1);
s7.3.1所选监听器(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val=s7.getSelectedItem().toString();
txt4.setText(val);
}
未选择公共无效(AdapterView父级){
}
});
s2.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val2=s2.getSelectedItem().toString();
txt5.setText(val2);
}
未选择公共无效(AdapterView父级){
}
});
s3.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val3=s3.getSelectedItem().toString();
txt6.setText(val3);
}
未选择公共无效(AdapterView父级){
}
});
s1.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val1=s1.getSelectedItem().toString();
txt3.setText(val1);
}
未选择公共无效(AdapterView父级){
}
});
s5.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val5=s5.getSelectedItem().toString();
txt7.setText(val5);
}
未选择公共无效(AdapterView父级){
}
});
s6.1选择的侦听器(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val6=s6.getSelectedItem().toString();
txt8.setText(val6);
}
未选择公共无效(AdapterView父级){
}
});
s4.setOnItemSelectedListener(
新建MSelectedListener(){
公营部门选举(
AdapterView父级、视图、整型位置、长id){
字符串val7=s4.getSelectedItem().toString();
txt9.setText(val7);
}
未选择公共无效(AdapterView父级){
}
});
}}//语法错误,请插入“;”以完成语句
}}
但是,代码中的所有变量(s1、s2、txt1、txt2,…)都出现错误“无法引用封闭范围“”中定义的非最终局部变量[var],并且在代码中指定的位置出现错误“Syntax error,insert”;“to complete Statement”。有人能帮我解决这个问题吗
谢谢!您不能这样做,因为存在局部变量,您从调用它们;您只需将它们声明为类的属性即可
public class MainActivity extends Activity {
Spinner s1,s2,s3,s4,s5,s6,s7;
TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
// The rest of your code
将局部变量声明为类变量,然后您还需要在结尾正确完成OnClickListener()方法。您需要在语法错误处用右括号和分号关闭该方法。三条建议:
OnItemClickListener
,并将其重新用于所有微调器如果必须访问annonymous类之外的变量,则该变量必须是
final
。
你的代码
public class MainActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
final Spinner s1,s2,s3,s4,s5,s6,s7;
final TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
final EditText ed1;
s7 = (Spinner) findViewById(R.id.spinner7);
s1 = (Spinner) findViewById(R.id.spinner1);
s2 = (Spinner) findViewById(R.id.spinner2);
s3 = (Spinner) findViewById(R.id.spinner3);
s4 = (Spinner) findViewById(R.id.spinner4);
s5 = (Spinner) findViewById(R.id.spinner5);
s6 = (Spinner) findViewById(R.id.spinner6);
txt4 = (TextView) findViewById(R.id.textView4);
txt3 = (TextView) findViewById(R.id.textView3);
txt5 = (TextView) findViewById(R.id.textView5);
txt6 = (TextView) findViewById(R.id.textView6);
txt7 = (TextView) findViewById(R.id.textView7);
txt8 = (TextView) findViewById(R.id.textView8);
txt9 = (TextView) findViewById(R.id.textView9);
ed1 = (EditText) findViewById(R.id.editText1);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
s7.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val = s7.getSelectedItem().toString();
txt4.setText(val);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s2.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val2 = s2.getSelectedItem().toString();
txt5.setText(val2);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s3.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val3 = s3.getSelectedItem().toString();
txt6.setText(val3);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s1.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val1 = s1.getSelectedItem().toString();
txt3.setText(val1);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s5.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val5 = s5.getSelectedItem().toString();
txt7.setText(val5);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s6.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val6 = s6.getSelectedItem().toString();
txt8.setText(val6);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
s4.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val7 = s4.getSelectedItem().toString();
txt9.setText(val7);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}}); //Syntax error, insert ";" to complete Statement
}
}
公共类MainActivity扩展活动{
创建时受保护的空隙(捆绑冰柱){
超级冰柱;
final Spinner s1,s2,s3,s4,s5,s6,s7;
final TextView txt3,txt4,txt5,txt6,txt7,txt8,txt9;
button.setOnClickListener(new View.OnClickListener() {
--followed by lots and lots of code--
button.setOnClickListener(new View.OnClickListener() { [code] });
private AdapterView.OnItemSelectedListener listenerForSpinner(final Spinner s, final TextView t) {
return new AdapterView.OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
String val = s.getSelectedItem().toString();
t.setText(val);
}
public void onNothingSelected(AdapterView<?> parent) {
}
};
}
s7.setOnItemSelectedListener(listenerForSpinner(s7, txt4));
s2.setOnItemSelectedListener(listenerForSpinner(s2, txt5));
...