3

我正在动态创建按钮...

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

     });  

    }

但是我怎么能取消选择其他已选择的按钮,我只想选择一个按钮!:)

4

2 回答 2

3
  1. 残酷的方式(如果您的按钮很少) - 保存您的按钮引用并创建私有方法,该方法循环通过您的按钮并在您不需要时取消选择
  2. 扩展您的按钮类并使其侦听单击其中一个按钮时生成的自定义事件
  3. 查看RadioGroup的实现
  4. #1 的变化。与其为您的按钮创建单独的侦听器,不如只创建一个并将其重用于所有按钮。从 OnClickListener 扩展该侦听器并添加 List 字段。每次将侦听器分配给按钮时,都会向该列表添加按钮引用。现在,何时onClick触发只需遍历列表并禁用“其他”按钮
于 2010-01-13T19:25:45.617 回答
2

声明一个变量来存储点击按钮的Id ::

private int EnabledButton;

创建时在每个按钮上设置一个 ID::

btn.setId(i);

或标签::

btn.setTag(i);   

然后在那个监听器中获取“启用按钮”,并调用一个函数来取消选择其他按钮::

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

}
于 2010-01-13T22:19:24.367 回答