前言
今天這篇文章不是寫一個完整的小應用,想總結一下一個比較常用也比較重要的知識點--監聽按鈕的點擊事件,一般在開發中,我們都會使用我們比較熟悉的其中一種方法,但是其實它的實現方法可分為三種,我想一個優秀的android工程師,肯定是能夠地將其全部牢固地掌握并且熟悉地運用的,同時,隨著時機的不同,不同的實現方法能帶來很多好處。
須知
1.Button和ImageButton都擁有一個Onclick事件
通過自身的.setOnClickListen(OnClickListen)方法添加點擊事件。
2.所有控件都有一個Onclick事件,并不是只有Button和ImageButton擁有。
3.通過點擊事件的監聽可以實現點擊按鈕之后要發生什么動作(即邏輯實現)
實現方法
1.匿名內部類的實現
2.自定義類的實現
3.實現接口的方式來實現
一、匿名內部類實現
這里我直接給出MainActivity主要代碼,并給出一定注釋
public class MainActivity extends Activity {
Button btn1, btn2;
Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
/*以上兩步,將btn1和btn2實例化
*findViewById返回一個View對象,故將其強制轉換為Button
*傳入參數通過Id查找
*/
btn1.setOnClickListener(new OnClickListener() {
//設置監聽器
public void onClick(View v) {
Toast tpast = Toast.makeText( MainActivity.this, "Button1被點擊了", Toast.LENGTH_SHORT);
toast.show();
}
});
//設置按鈕點擊事件,當點擊時,用Toast顯示出110的文本
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast toast = Toast.makeText(MainActivity.this, "Button2被點擊了", Toast.LENGTH_SHORT);
toast.show();
}
});
}
}
//點擊按鈕2同理
二、自定義類實現方法
代碼如下:
public class MainActivity extends Activity {
Button btn1, btn2;
Toast toast;
class MyClickListener implements OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
toast = Toast.makeText(MainActivity.this, "按鈕1被點擊了", Toast.LENGTH_SHORT);
toast.show();
break;
case R.id.button2:
toast = Toast.makeText(MainActivity.this, "按鈕2被點擊了", Toast.LENGTH_SHORT);
toast.show();
break;
default:
break;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(new MyClickListener());
btn2.setOnClickListener(new MyClickListener());
}
}
解析
這種方法我們是自定義了一個MyClickListener類,那么需要了解的是,使用這種方法時,在設置點擊事件的時候,new MyClickListener()處也可以繼續實現Onclick()的重寫,那么就有一個用處,當我們有很多按鈕,并且每個按鈕點擊都要實現相同的功能,又有其特定功能的時候,就非常方便了,因為它會自動調用自定義的父類MyClickListen中的Onclick方法。
同時,我發現,自定義的這個類,既可以寫在MainActivity中,也可以不在這個類中,那么此時它就是外部類了。
三、接口實現
代碼如下:
public class MainActivity extends Activity implements OnClickListener {
//OnClickListen是一個接口,故為implements
Button btn1, btn2;
Toast toast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);//此處傳入this即可
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
toast = Toast.makeText(this, "按鈕1被點擊", Toast.LENGTH_SHORT);
toast.show();
break;
case R.id.button2:
toast = Toast.makeText(this, "按鈕2被點擊", Toast.LENGTH_SHORT);
toast.show();
break;
default:
break;
}
}
}
總結
那么,這幾種方法就總結完了,還是很容易理解的,最好能夠將它吃透!其實也還有其它的寫法,但是本質是一樣的,比如可以把匿名內部類變成一個獨立類,那么我們只需要定義出來一個對象就可以了。
文章到此結束,歡迎高手指點批評,謝謝!