2014年8月15日 星期五

[Android 筆記]Multi-Button SetOnClickListener

Button setOnClickListener


最近再寫一個Project遇到處理Button的問題,假如有多個Button該怎麼處理


public class MainActivity extends Activity {
Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initfunction();
        setonbtnclick();
    }
  
  private void initfunction(){
    btn0=(Button)findViewById(R.id.buttonno0);
        btn1=(Button)findViewById(R.id.buttonno1);
        btn2=(Button)findViewById(R.id.buttonno2);
        btn3=(Button)findViewById(R.id.buttonno3);
        btn4=(Button)findViewById(R.id.buttonno4);
        btn5=(Button)findViewById(R.id.buttonno5);
        btn6=(Button)findViewById(R.id.buttonno6);
        btn7=(Button)findViewById(R.id.buttonno7);
        btn8=(Button)findViewById(R.id.buttonno8);
        btn9=(Button)findViewById(R.id.buttonno9);
  }
  
  public void setonbtnclick(){
        btn0.setOnClickListener(new BtnOnClick());
        btn1.setOnClickListener(new BtnOnClick());
        btn2.setOnClickListener(new BtnOnClick());
        btn3.setOnClickListener(new BtnOnClick());
        btn4.setOnClickListener(new BtnOnClick());
        btn5.setOnClickListener(new BtnOnClick());
        btn6.setOnClickListener(new BtnOnClick());
        btn7.setOnClickListener(new BtnOnClick());
        btn8.setOnClickListener(new BtnOnClick());
        btn9.setOnClickListener(new BtnOnClick());
  } 
    
  private class BtnOnClick implements OnClickListener{

        @Override
        public void onClick(View v) {
    //dosomething()

    }
 }   
}


這樣,光處理Button初使化設定就會花掉不少時間
再網路上就找到有一種方法

批次、大量設定按鈕事件偵測(setOnClickListener)

以下的code以動態新增Button實作三個Button

public class MainActivity extends Activity implements OnClickListener{
    Button btn=null;
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView) findViewById(R.id.textView1);
        initOnClickListener();//初始化Button

    }
    
    void initOnClickListener(){
        int ids[]={
                R.id.button1,R.id.button2,R.id.button3
        };   
        for(int i=0; i<ids.length;i++){
            if((btn=(Button)findViewById(ids[i]))!= null)
                btn.setOnClickListener(this);
        }
    }
    public void onClick(View v) {
            switch( v.getId() ) {
                    case R.id.button1:
                        tv.setText("btn1");
                            break;
                    case R.id.button2:
                        tv.setText("btn2");
                            break;
                    case R.id.button3:
                        tv.setText("btn3");
                        break;            
        }
        
    }


結果: 點選哪個btn就顯是哪個btn
Screenshot_2014-08-08-20-30-45.png

結論:利用動態新增按鈕方式,可以很方便初使化Button,也可以減少程式碼