2013-03-18 130 views
0

我在循环中为按钮添加OnClickListener,问题在于它的变量需要是最终的,但是不能增加他。在ArrayList中添加按钮侦听器

我的代码:

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

由于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

不要将变量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(); 

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

      } 
     }); 
} 
1

你需要使按钮最终不是我,下面是一个例子它应该做的事:

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


       } 
      }); 

     } 

希望它能帮助。

相关问题