0

我在按钮的循环中添加 OnClickListener,问题是 i 变量需要是最终的,但是不能增加他。

我的代码:

ArrayList<Button> buttonList  = new ArrayList<Button>();
buttonList.add((Button)findViewById(R.id.mov1_btn));
buttonList.add((Button)findViewById(R.id.mov2_btn));
buttonList.add((Button)findViewById(R.id.mov3_btn));
buttonList.add((Button)findViewById(R.id.mov4_btn));
buttonList.add((Button)findViewById(R.id.mov5_btn));
buttonList.add((Button)findViewById(R.id.mov6_btn));

for(int i = 0;i<buttonList.size();i++) 
    {
        buttonList.get(i).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                    buttonList.get(i).setBackgroundResource(R.drawable.mov1o);  
                    movCnt = i;

                }
            });
    }
4

4 回答 4

5

由于ican't be final,您必须声明另一个变量。

for (int i = 0; i < buttonList.size(); i++) {
    final int current = i;  

    buttonList.get(i).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
            buttonList.get(current).setBackgroundResource(R.drawable.mov1o);
            movCnt = current;
        }
    });
}
于 2013-03-18T15:45:31.197 回答
1

您需要使按钮最终不是 i,这是应该完成的示例:

ArrayList<Button> list = new ArrayList<Button>();

        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        list.add((Button) findViewById(R.id.BTN_login));
        for (int i = 0; i < list.size(); i++)
        {
            final Button tempButton = list.get(i);
            tempButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                     tempButton.setBackgroundResource(R.drawable.mov1n);
                     tempButton.setBackgroundResource(R.drawable.mov1o);  


                }
            });

        }

希望能帮助到你。

于 2013-03-18T15:49:35.913 回答
1

Don't set the variable i to final, instead just set a tag to the view. This way the value can always stay with the view and can be used whenever needed.

for(int i = 0;i<buttonList.size();i++) 
{
    buttonList.setTag(i);
    buttonList.get(i).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                buttonList.get(i).setBackgroundResource(R.drawable.mov1o);  
                movCnt = (Integer)v.getTag();

            }
        });
}
于 2013-03-18T15:45:46.477 回答
1
//...
for(int i = 0;i<buttonList.size();i++) 
{
    final int current = i;

    buttonList.get(ii).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                buttonList.get(movCnt).setBackgroundResource(R.drawable.mov1n);
                buttonList.get(current).setBackgroundResource(R.drawable.mov1o);  
                movCnt = current;

            }
        });
}
于 2013-03-18T15:47:10.437 回答