Java android setOnclickListener onClick方法非最终变量
我是Android编程新手。Java android setOnclickListener onClick方法非最终变量,java,android,Java,Android,我是Android编程新手。 我想使用for循环来做类似的事情。 这是我的密码: int stubs[] = {R.id.stub_1, R.id.stub_2, R.id.stub_3}; View viewStubs[] = {stub_1, stub_2e, stub_3}; Button buttons[] = {button2, button3, button4}; button2 = (Button)findViewById(R.id.button2); button3 = (But
我想使用for循环来做类似的事情。
这是我的密码:
int stubs[] = {R.id.stub_1, R.id.stub_2, R.id.stub_3};
View viewStubs[] = {stub_1, stub_2e, stub_3};
Button buttons[] = {button2, button3, button4};
button2 = (Button)findViewById(R.id.button2);
button3 = (Button)findViewById(R.id.button3);
button4 = (Button)findViewById(R.id.button4);
for(int i=0; i<buttons.length; i++){
buttons[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(viewStubs[i] == null){
viewStubs[i] = ((ViewStub)findViewById(stubs[i])).inflate();
}
}
}
}
int stubs[]={R.id.stub_1,R.id.stub_2,R.id.stub_3};
查看视图存根[]={stub_1,stub_2e,stub_3};
按钮按钮[]={button2,button3,button4};
button2=(按钮)findViewById(R.id.button2);
button3=(按钮)findViewById(R.id.button3);
button4=(按钮)findViewById(R.id.button4);
对于(int i=0;i尝试在int i
之前添加final
viewStubs
数组应该是这个
类的属性(看起来它可能是静态的)
int stubs[]={R.id.stub_1,R.id.stub_2,R.id.stub_3};
//viewStubs应该是此类的属性(可能是静态的)
viewStubs[]={stub_1、stub_2、stub_3};
按钮[]={
(按钮)findViewById(R.id.button2),
(按钮)findViewById(R.id.button3),
(按钮)findViewById(R.id.button4)
};
对于(int i=0;i
for(int i=0;i
}
现在,您可以在内部for循环中使用最终变量inmutable_index而没有任何问题,只需将内部类中i变量的所有用法替换为inmutable_index变量。检查以下问题:版本小于7的Java中没有闭包!您不能在内部类中使用局部vari
。您应该重写代码你可以生成一个最终的int-var,并将i赋值给它。然后将新的var传递给内部类…我认为如果你想继续使用相同的代码,你必须全局赋值int-i。但这确实是一个便宜的主意。看,这可能对你有帮助,但这行不通。将final添加到for循环中的变量中意味着变量值无法更改和修改因此,它将开始抛出一些其他错误,如“无法分配最终局部变量”。想象一下在最终变量上循环,您就会明白为什么会出现问题。对于(final int i=0;iint stubs[] = {R.id.stub_1, R.id.stub_2, R.id.stub_3};
// viewStubs should be a property of this class (maybe static)
viewStubs[] = {stub_1, stub_2, stub_3};
Button buttons[] = {
(Button)findViewById(R.id.button2),
(Button)findViewById(R.id.button3),
(Button)findViewById(R.id.button4)
};
for (int i=0; i<buttons.length; i++) {
View.OnClickListener listener = new View.OnClickListener() {
private int viewId;
private int stubId;
public void onClick(View v) {
if (viewStubs[stubId] == null) {
viewStubs[stubId] = (ViewStub)findViewById(viewId).inflate();
}
}
public View.OnClickListener setIds(int vid, int sid) {
viewId = vid;
stubId = sid;
return this;
}
}
buttons[i].setOnClickListener(listener.setIds(stubs[i], i));
}
final int inmutable_index = i;
btn.setOnClickListener(new OnClickListener(){...});