Android開發中有三種主要的方式用於設置View的點擊事件,1、創建內部類;2、主類中實現OnClickListener介面;3、使用匿名內部類。這三種方式都用到了OnClickListener介面,只是不同形式而已。其中OnClickListener是監聽View點擊事件的介面,介面中定義控制項 ...
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(); } } !
二、匿名內部類實現
當按鈕較少或者只有一個按鈕時,就不需要再單獨創建一個類實現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(); } }