在ArrayList中添加按钮侦听器

时间:2013-03-18 15:40:51

标签: android

我在循环中为按钮添加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 个答案:

答案 0 :(得分:5)

由于i不能是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;
        }
    });
}

答案 1 :(得分:1)

不要将变量i设置为final,而只是将标记设置为视图。 这样,值可以始终保持在视图中,并且可以在需要时使用。

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();

            }
        });
}

答案 2 :(得分: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;

            }
        });
}

答案 3 :(得分: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);  


                }
            });

        }

希望它有所帮助。