2013-03-18 5 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으로 설정하지 말고 대신 태그를보기로 설정하십시오. 값을 사용하면 항상 값을 볼 수 있으므로 필요할 때마다 값을 사용할 수 있습니다.

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


       } 
      }); 

     } 

는 도움이되기를 바랍니다.