2013-03-18 129 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); 


       } 
      }); 

     } 

希望它能幫助。

相關問題