2011-03-17 3 views
0

RelativeLayout에 동적으로 버튼 수를 추가하고 싶지만 코드가 작동하지 않습니다. 그것들을 디스플레이의 같은 위치에 추가합니다.버튼이있는 RelativeLayout

private void createButtons() { 
     buttons = new ArrayList<Button>(); 
     RelativeLayout bg = (RelativeLayout) findViewById(R.id.Bg); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

     for(int i = 0; i < channels.size(); i++){ 
      Button newButton = new Button(this); 
      newButton.setId(i); 
      newButton.setText(channels.get(i).getTitle()); 
      buttons.add(newButton); 
      if(i > 0){ 
       lp.addRule(RelativeLayout.RIGHT_OF, i-1); 
       bg.addView(newButton, lp); 
      }else{ 
       bg.addView(newButton); 
      } 
     } 

    } 

작동하려면 어떻게해야합니까?

+1

모든 반복마다 lp.addRule()을 호출하므로 LayoutParams에 각 반복마다 하나 이상의 (충돌하는) 규칙이 포함되지 않습니다. LayoutParams는 매 반복마다 인스턴스화해야합니까? – rogerkk

답변

2

몇 가지 문제가 있습니다. 우선, @rogerkk가 지적한 문제를 피하기 위해 각 버튼에 대한 새로운 레이아웃 매개 변수 레이아웃을 작성해야합니다. 둘째, 첫 번째 버튼에 ID 0을 사용하려고합니다. 이것은 작동하지 않습니다.

다음은이 두 가지 문제를 해결하는 함수의 재 작업입니다.

private void createButtons() { 
    buttons = new ArrayList<Button>(); 
    RelativeLayout bg = (RelativeLayout) findViewById(R.id.Bg); 

    for(int i = 0; i < channels.size(); i++){ 
     Button newButton = new Button(this); 
     newButton.setId(i+1); // ID of zero will not work 
     newButton.setText(channels.get(i).getTitle()); 
     buttons.add(newButton); 
     // New layout params for each button 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

     if(i > 0){ 
      // using getId() here in case you change how you assign IDs 
      int id =buttons.get(i-1).getId(); 
      lp.addRule(RelativeLayout.RIGHT_OF, id); 
     } 
     bg.addView(newButton,lp);    
    } 

}