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里面添加屬性的方法時不推薦的,畢竟很不好去維護。

  2、內部類的使用在Android開發中是經常用到的,所以非常的重要,這里附上我之前總結的博客園博文鏈接:http://www.cnblogs.com/xiao-chuan/p/6014752.html

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

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM