버튼을 동적으로 만들면 하나를 선택하고 다른 버튼을 선택 해제 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2059454

문제

버튼을 동적으로 만들고 있습니다 ...

for(int i=0; i<colSize;i++){
    final Button btn = new Button(this);    
    btn.setText(SectionName[i]);        
    btn.setTextSize(10);
    btn.setPadding(8, 3,8, 3);   
    btn.setTextColor(Color.WHITE);
    btn.setTypeface(Typeface.SERIF, Typeface.BOLD);

    btn.setOnClickListener(new OnClickListener() {  
        @Override
        public void onClick(View v) {               
            //***Every time that I click my button is selected !:)
            btn.setSelected(true);      
        }                   

     });  

    }

그러나 선택한 다른 버튼을 어떻게 선택할 수 있는지, 나는 단지 하나의 버튼을 선택하고 싶다! :)

도움이 되었습니까?

해결책

클릭 된 버튼의 ID를 저장하도록 변수를 선언합니다 ::

private int EnabledButton;

생성 될 때 모든 버튼에 ID를 설정하십시오.

btn.setId(i);

또는 태그 ::

btn.setTag(i);   

그런 다음 청취자에서 "enabledButton"을 가져 와서 다른 버튼을 선택 해제하기 위해 함수를 호출합니다.

 btn.setOnClickListener(new OnClickListener() {  
        @Override
        public void onClick(View v) {                 
        EnabledButton=btn.getId();
        DeselectButtons();        
        btn.setSelected(true);      
    }                   

 });  

다른 버튼을 선택 해제하는 함수 ::

public void DeselectButtons() {
    for(int i=0; i<NumberofButtons;i++){            
                    if (EnabledButton!= i)
        this.findViewById(i).setSelected(false);
    }           

}

다른 팁

  1. 잔인한 방법 (버튼이 적은 경우 작동) - 버튼 참조를 저장하고 필요한 경우 버튼을 통해 고리하고 선택 사항이 필요하지 않으면 개인 메소드를 만듭니다.
  2. 버튼 클래스를 연장하고 버튼 중 하나를 클릭 할 때 생성되는 사용자 정의 이벤트를 듣게합니다.
  3. 를보세요 무선 그룹 구현
  4. #1의 변형. 버튼에 대한 별도의 리스너를 만드는 대신 하나만 생성하고 모든 버튼에 대해 재사용합니다. OnClickListener에서 해당 리스너를 확장하고 목록 필드를 추가하십시오. 청취자에게 버튼 추가 버튼을 해당 목록에 할당 할 때마다. 이제 언제 onClick 목록을 통해 단순히 루프를 트리거하고 "기타"버튼을 비활성화합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top