Java不能引用非final变量

时间:2010-11-07 13:04:44

标签: java variables

for (int i=0; i<pages; i++) {
        ImageView img=new ImageView(this);
             ...

        img.setOnClickListener(new OnClickListener() {
            @Override public void onClick(View v) {
                showpage(i);
                }


            }
        });

        FLall.addView(img);
    }

我怎么能在java中这样做?我总是“不能在不同方法中定义的内部类中引用非最终变量”

2 个答案:

答案 0 :(得分:9)

虽然您可以创建一个垃圾变量并将其标记为final但我实际上更喜欢通过构造函数传递此值。它不那么简洁,但是如果你决定在某个时候移动你的匿名内部类,那么它可以更加可维护。

for (int i=0; i<pages; i++) {
    ImageView img=new ImageView(this);
    ...

    img.setOnClickListener(new OnClickListener(i) {
        private int ind;
        public OnClickListener(int ind){
            super();
            this.ind = ind;
        }
        @Override 
        public void onClick(View v) {
            showpage(ind);
        }
    });

    FLall.addView(img);
}

答案 1 :(得分:8)

setOnClickListener来电之前:

final int thisIndex = i;

然后在处理程序中引用thisIndex