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

     });  

    }

しかし、選択された他のボタンの選択を解除するにはどうすればよいでしょうか。ボタンを 1 つだけ選択したいのです。:)

4

2 に答える 2

3
  1. 残忍な方法(ボタンがほとんどない場合に機能します)-ボタン参照を保存し、ボタンをループして不要になったら選択を解除するプライベートメソッドを作成します
  2. ボタン クラスを拡張し、ボタンの 1 つがクリックされたときに生成されるカスタム イベントをリッスンするようにします。
  3. RadioGroupの実装を見てください
  4. #1のバリエーション。ボタンに個別のリスナーを作成する代わりに、1 つだけ作成してすべてのボタンに再利用します。そのリスナーを OnClickListener から拡張し、List フィールドを追加します。リスナーをボタンに割り当てるたびに、そのリストにボタン参照を追加します。これで、トリガーされたときにonClick、リストをループして「その他」ボタンを無効にするだけです
于 2010-01-13T19:25:45.617 に答える
2

クリックされたボタンの 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);
    }           

}
于 2010-01-13T22:19:24.367 に答える