问题描述
for(intt=0;t<num_btn.length;t++){num_btn[t].setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstub//这里内部类访问for语句的变量出现错误,定义final也会错误,因为i++;//mtv.append(num_btn[t].getText());}});}
这里加上final和不加final都好像不行啊
解决方案
解决方案二:
为什么一定要用匿名类你可以建个子类.用int做构造子参数。
解决方案三:
你把t作为全局变量或者静态变量来访问就可以了可以通过类名来访问了ClassName.tprivatestaticintt;for(intt=0;t<num_btn.length;t++){num_btn[t].setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstub//这里内部类访问for语句的变量出现错误,定义final也会错误,因为i++;//mtv.append(num_btn[ClaaaName.t].getText());}});}
解决方案四:
楼上不对吧那样按钮没有差异化.应该不是想要的结果
解决方案五:
在中间声明一个final,每次在匿名类调用之前,先更新中间的这个final变量publicclassA{publicvoidfoo(){for(inti=0;i<3;i++){finalintii=i;//放中间,每次给final赋值就可以了Threadt=newThread(newRunnable(){@Overridepublicvoidrun(){System.out.printf("%s'si=%d%n",Thread.currentThread().getName(),ii);}});t.start();}}publicstaticvoidmain(String[]args){newA().foo();}}
解决方案六:
你这个设计本身就有问题,首先不应该为每一个元素(你这里是按钮)创建一个监听器,相同类型或作用的元素应该共用一个监听器,其次响应事件时应由事件判断具体是哪一个元素触发的事件,而不应该用一个死引用。