动态创建按钮,我可以选择一个并取消选择其他按钮吗?

时间:2010-01-13 19:07:22

标签: android event-handling android-widget

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

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

     });  

    }

但是我如何取消选择所选的其他按钮,我只想选择一个按钮! :)

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

声明一个变量来存储Clicked Button ::

的Id
private int EnabledButton;

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

btn.setId(i);

或标签::

btn.setTag(i);   

然后在该Listener中获取“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);
    }           

}