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

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 に答える
0

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

 final int inmutable_index = i;

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

}

これで、for ループ内で最終変数 inmutable_index を問題なく使用できます。内部クラスの i 変数のすべての使用を inmutable_index 変数に置き換えるだけです。

于 2012-08-01T10:55:04.637 に答える