Android移動開發 實現按鈕機制的三種方法
阿新 • • 發佈:2019-01-05
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(); } }