1. 程式人生 > >Android移動開發 實現按鈕機制的三種方法

Android移動開發 實現按鈕機制的三種方法

       Android開發中有三種主要的方式用於設定View的點選事件,1、建立內部類;2、主類中實現OnClickListener介面;3、使用匿名內部類。這三種方式都用到了OnClickListener介面,只是不同形式而已。其中OnClickListener是監聽View點選事件的介面,介面中定義控制元件被點選時的回撥方法OnClick()。View需要在setOnclickListener(OnClickLisener listener)方法的引數中傳入OnClickListener介面監聽View的點選事件。

一、內部類實現

     內部類實現的方法是:建立一個內部類實現OnClickListener介面並重寫onClick()方法,在方法中寫入點選事件的邏輯。內部類寫完之後需要為按鈕設定setOnClickListener(Listener listener)屬性,在引數中傳入之前建立好的內部類物件即可。使用這種點選事件的好處,當按鈕較多時可以在onClick(View v)方法中使用switch語句case屬性設定各自不同的點選事件邏輯。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button =(Button)findViewById(R.id.button);
    button.setOnClickListener(new MyButton());
}
private class MyButton implements View.OnClickListener{
    @Override
    public void onClick(View view) {
        Toast.makeText(getApplicationContext(),"已點選按鈕",Toast.LENGTH_SHORT).show();
    }
}

二、匿名內部類實現

     當按鈕較少或者只有一個按鈕時,就不需要再單獨建立一個類實現OnClickListener介面了,可以直接建立OnClickListener的匿名內部類傳入按鈕的setOnClickListener()引數中。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getApplicationContext(), "已點選按鈕", Toast.LENGTH_SHORT).show();
        }
    });
}

三、Activity本身實現事件介面

      除了以上兩種方法,還可以在主類中實現該介面,然後重寫onClick()方法,這裡需要注意的是,button.setOnCLickListener(this);方法中接收了一個引數this,這個this代表的是該Activity的引用。由於Activity實現了OnClickListener介面,所以這裡this代表了OnClickListener的引用,在方法中傳入this就代表該控制元件綁定了點選事件的介面。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    @Override
        public void onClick(View view) {
            Toast.makeText(getApplicationContext(),"已點選按鈕",Toast.LENGTH_SHORT).show();
        }
    }