1. 程式人生 > >Android開發-button監聽事件

Android開發-button監聽事件

一、實現button點選事件的方法

  實現button點選事件的監聽方法有很多種,這裡總結了常用的四種方法:

  1、匿名內部類

  2、外部類(獨立類)

  3、實現OnClickListener介面

  4、新增XML屬性

  每一種方法都有它的優點也有它的不足,那麼接下來就來詳細的講解這四個實現方法

二、具體實現

  1、匿名內部類:

  在Android開發中我們會經常看到各種匿名內部類的使用,那麼在實現button點選事件的時候也可以用匿名內部類。

  這樣使用的好處是:1)不需要重新寫一個類,直接在new的時候去實現想實現的方法,很方便。

           2)當別的地方都用不到這個方法的時候使用匿名內部類

           3)高內聚,高內聚是設計原則之一,匿名內部類的特性之一就是擁有高內聚。

  但是也有不足的地方:1)當別的地方也需要同樣的一個方法時還要重新再在那個地方寫一次匿名內部類,這樣使得程式碼的冗餘性很高。

            2)不方便後期的維護

  a、新增一個按鈕

複製程式碼
<Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft
="true" android:layout_below="@+id/textView1" android:layout_marginTop="20dp" android:text="方法一:匿名內部類" />
複製程式碼

  b、回到MainActivity中實現

複製程式碼
public class MainActivity extends Activity{

    private Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 方法一:使用匿名內部類實現button按鈕的 */ //繫結button按鈕 btn1 = (Button) findViewById(R.id.button1); //監聽button事件 btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast tot = Toast.makeText( MainActivity.this, "匿名內部類實現button點選事件", Toast.LENGTH_LONG); tot.show(); } }); } }
複製程式碼

  c、執行結果

  2、獨立類(外部類):

  重新寫一個獨立的類來實現業務邏輯或是想要的效果

  這樣寫的好處是:1)一定情況下可以方便維護

          2)可以降低程式碼的冗餘性,可以同時使用到多個地方

  不足的地方是:1)當只使用一次時浪費資源,程式的效能不高

         2)當有很多個方法時程式碼的可讀性不高,此時不方便維護

  a、新增一個button按鈕

複製程式碼
 <Button
        android:id="@+id/button2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="20dp"
        android:text="方法二:獨立類" />
複製程式碼

  b、回到MainActivity中實現,外部類中需要實現OnClickListener介面,並重寫其中的方法 

複製程式碼
public class MainActivity extends Activity {

    private Button btn2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
         * 方法二:獨立類實現button實現
         */
        btn2 = (Button) findViewById(R.id.button2);
        btn2.setOnClickListener(new btn2Click(this));


    }
}
複製程式碼 複製程式碼
public class btn2Click implements OnClickListener {

    private Context context;

    //過載btn2Click方法
    public btn2Click(Context ct){
        this.context=ct;
    }

    @Override
    public void onClick(View v) {
        Toast tot = Toast.makeText(
                context,
                "獨立類實現button點選事件",
                Toast.LENGTH_LONG);
        tot.show();    
    }

}
複製程式碼

  c、執行效果

  3、實現OnClickListener介面:

  與獨立類實現的原理是一樣的,優點和缺陷也是大徑相同的,實現OnClickListener介面的時候實現它其中的onClick方法

  a、新增button按鈕

複製程式碼
<Button
        android:id="@+id/button3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button2"
        android:layout_below="@+id/button2"
        android:layout_marginTop="20dp"
        android:text="方法三:實現介面" />
複製程式碼

  b、回到MainActivity中實現

複製程式碼
public class MainActivity extends Activity implements OnClickListener {

    private Button btn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
         * 方法三:實現OnClickListener介面
         */
        btn3 = (Button) findViewById(R.id.button3);
        btn3.setOnClickListener(this);

    }

    //實現OnClickListener介面中的方法
    @Override
    public void onClick(View v) {
        Toast tot = Toast.makeText(
                MainActivity.this,
                "介面OnClickListener實現button點選事件",
                Toast.LENGTH_LONG);
        tot.show();

    }
}
複製程式碼

  c、執行效果

  4、新增XML屬性:

  我們可以給XML新增一個onClick屬性來實現點選事件的監控

  這樣的好處是:更加便捷,程式碼量能夠減少

  但是不足的地方是:每一次維護的時候都要去XML裡面改原始碼,是不是很不好維護很麻煩呢?

  a、新增一個button按鈕,並新增onClick按鈕

複製程式碼
<Button
        android:id="@+id/button4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button3"
        android:layout_below="@+id/button3"
        android:layout_marginTop="20dp"
        android:onClick="btn4Click"
        android:text="方法四:新增xml屬性" />
複製程式碼

  b、回到MainActivity中實現onClick按鈕

複製程式碼
 /*
     * 方法四:新增XML屬性
     */
    public void btn4Click(View v){
        Toast tot = Toast.makeText(
                MainActivity.this,
                "新增XML標籤實現button點選事件",
                Toast.LENGTH_LONG);
        tot.show();
    }
複製程式碼

  c、執行結果:

三、總結:

  1、在實現監聽的時候都是需要兩步走:

    1)繫結button按鈕

    2)監聽button事件

  1、具體使用什麼方法去實現button按鈕點選事件的監聽要看具體的需求,都各有各的好處和不足。如果只使用一次則推薦使用內部類的方法;如果多次使用則使用外部類的方法;實現介面的方法可以在原本的類中實現;但是在XML裡面新增屬性的方法時不推薦的,畢竟很不好去維護。

  3、Android開發中有很多按鈕,但是監聽的方法常用的都是這幾種,所以能夠舉一反三,這也是為什麼寫這個的原因

  4、Toast是Android中一個實現的效果,是不是經常看到這個效果呢?在寫監聽的時候順便也把Toast一起學了,一舉兩得哈哈哈!!

PS:看似零零散散的知識點,但所有的知識點都是一條連線的,任何行業的知識點都是如此,就好比先有了數字才出現算數,先出現了英文字母才有了單詞一樣。。。