Android開發中有三種主要的方式用於設置View的點擊事件,1、創建內部類;2、主類中實現OnClickListener接口;3、使用匿名內部類。這三種方式都用到了OnClickListener接口,只是不同形式而已。其中OnClickListener是監聽View點擊事件的接口,接口中定義控件被點擊時的回調方法OnClick()。View需要在setOnclickListener(OnClickLisener listener)方法的參數中傳入OnClickListener接口監聽View的點擊事件。筆者這里僅僅用了三種button的方式,以后有新的方式的話會再添加到里面來,因為Button的實現方式比較多,自己常常不知道為啥就忘記了。
一、內部類實現
內部類實現的方法是:創建一個內部類實現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(); } } !
二、匿名內部類實現
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(); } }