Android開發-之監聽button點擊事件

1、實現button點擊事件的方法

  實現button點擊事件的監聽方法有不少種,這裏總結了經常使用的四種方法:html

  一、匿名內部類android

  二、外部類(獨立類)ide

  三、實現OnClickListener接口性能

  四、添加XML屬性this

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

 

2、具體實現

  一、匿名內部類:

  在Android開發中咱們會常常看到各類匿名內部類的使用,那麼在實現button點擊事件的時候也能夠用匿名內部類。設計

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

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

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

  可是也有不足的地方: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、運行結果

 

 

  二、獨立類(外部類):

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

  這樣寫的好處是: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、運行效果

 

 

 

  三、實現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、運行效果

 

 

 

  四、添加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、運行結果:

 

 

 

3、總結:

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

    1)綁定button按鈕

    2)監聽button事件

  一、具體使用什麼方法去實現button按鈕點擊事件的監聽要看具體的需求,都各有各的好處和不足。若是隻使用一次則推薦使用內部類的方法;若是屢次使用則使用外部類的方法;實現接口的方法能夠在本來的類中實現;可是在XML裏面添加屬性的方法時不推薦的,畢竟很很差去維護。

  二、內部類的使用在Android開發中是常常用到的,因此很是的重要,這裏附上我以前總結的博客園博文連接:http://www.cnblogs.com/xiao-chuan/p/6014752.html

  三、Android開發中有不少按鈕,可是監聽的方法經常使用的都是這幾種,因此可以觸類旁通,這也是爲何寫這個的緣由

  四、Toast是Android中一個實現的效果,是否是常常看到這個效果呢?在寫監聽的時候順便也把Toast一塊兒學了,一箭雙鵰哈哈哈!!

 

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

相關文章
相關標籤/搜索