1

我是 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 = (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();
                    }

                }
            }
        }

但是,onClick方法“i”有错误:
Cannot refer to a non-final variable i inside an inner class defined in a different method

4

3 回答 3

0

for(int i = 0; i < something.length; i++){

 final int inmutable_index = i;

 btn.setOnClickListener(new OnClickListener(){...});

}

现在您可以在 for-loop 内部使用最终变量 inmutable_index 没有任何问题,只需将内部类中 i 变量的所有使用替换为 inmutable_index 变量。

于 2012-08-01T10:55:04.637 回答
0

viewStubs数组应该是this类的属性(似乎它可能是静态的)。

int 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));
}
于 2012-08-01T10:51:38.083 回答
0

尝试添加final之前int i

于 2012-08-01T10:30:54.607 回答