Android的按鈕單擊事件及監聽器的實現方式

來源:互聯網
上載者:User

標籤:

第一種:匿名內部類作為事件監聽器類

大部分時候,事件處理器都沒有什麼利用價值(可利用代碼通常都被抽象成了商務邏輯方法),因此大部分事件監聽器只是臨時使用一次,所以使用匿名內部類形式的事件監聽器更合適,實際上,這種形式是目前是最廣泛的事件監聽器形式。上面的程式碼就是匿名內部類來建立事件監聽器的!!!
對於使用匿名內部類作為監聽器的形式來說,唯一的缺點就是匿名內部類的文法有點不易掌握,如果讀者java基礎紮實,匿名內部類的文法掌握較好,通常建議使用匿名內部類作為監聽器。
第二種:內部類作為監聽器

將事件監聽器類定義成當前類的內部類。1、使用內部類可以在當前類中複用監聽器類,因為監聽器類是外部類的內部類,2、所以可以自由訪問外部類的所有介面組件。這也是內部類的兩個優勢。上面代碼就是內部類的形式!!
第三種:Activity本身作為事件監聽器
這種形式使用activity本身作為監聽器類,可以直接在activity類中定義事件處理器方法,這種形式非常簡潔。但這種做法有兩個缺點:(1)這種形式可能造成程式結構混亂。Activity的主要職責應該是完成介面初始化;但此時還需包含事件處理器方法,從而引起混亂。(2)如果activity介面類需要實現監聽器介面,讓人感覺比較怪異。
上面的程式讓Activity類實現了OnClickListener事件監聽介面,從而可以在該Activity類中直接定義事件處理器方法:onClick(view v),當為某個組件添加該事件監聽器對象時,直接使用this作為事件監聽器對象即可。

第四種:外部類作為監聽器
ButtonTest類

當使用者單擊button按鈕時,程式將會觸發MyButtonListener監聽器
外部MyButtonListener類

使用頂級類定義事件監聽器類的形式比較少見,主要因為如下兩個原因:
1、事件監聽器通常屬於特定的gui介面,定義成外部類不籃球提高程式的內聚性。
2、外部類形式的事件監聽器不能自由訪問建立gui介面的類中的組件,編程不夠簡潔。
但如果某個事件監聽器確實需要被多個gui介面所共用,而且主要是完成某種商務邏輯的實現,則可以考慮使用外部類的形式來定義事件監聽器類。
第五種:直接綁定到標籤
Android還有一種更簡單的綁定事件監聽器的的方式,直接在介面布局檔案中為指定標籤綁定事件處理方法。
對於很多Android標籤而言,它們都支援如onClick、onLongClick等屬性,這種屬性的屬性值就是一個形如xxx
(View source)
的方法的方法名。在布局檔案中為button添加屬性,如一代碼:

為Button按鈕綁定一個事件處理方法:clickHanlder,這意味著開發人員需要在該介面布局對應的Activity中定義一個void clickHanler(View source)方法,該方法將會負責處理該按鈕上的單擊事件。
下面是該介面布局對應的java代碼:

 

 

 

 

另一種維度思考:

android button控制項目前主要有如下幾種監聽方式:

    1. 一個button控制項對應一個監聽:
              Button buttontest;        buttontest = (Button) findViewById(R.id.button1);        buttontest.setOnClickListener(new View.OnClickListener() {                        @Override            public void onClick(View v) {                // TODO Auto-generated method stub                Log.i("TEST", "button onClick");            }        });

       

    2. 多個button對應一個監聽1:
      start = (Button) findViewById(R.id.button1);stop = (Button) findViewById(R.id.button2);start.setOnClickListener(mylistener );stop.setOnClickListener(mylistener );View.OnClickListener mylistener = new View.OnClickListener() {                @Override        public void onClick(View v) {            switch (v.getId()) {            case R.id.button1:                Log.d(TAG, "Start to recorder video\n");                start_recorde();                break;            case R.id.button2:                Log.d(TAG, "Stop to recorder video\n");                stop_recorde();                break;            default:                break;            }            }    };

       

    3. 多個button對應一個監聽2:
      public class MainActivity extends Activity implements View.OnClickListener{    //介面元素    private Button start;    private Button stop;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                start = (Button) findViewById(R.id.button1);        stop = (Button) findViewById(R.id.button2);        start.setOnClickListener(this);        stop.setOnClickListener(this);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.button1:            Log.d(TAG, "Start to recorder video\n");            break;        case R.id.button2:            Log.d(TAG, "Stop to recorder video\n");            break;        default:            break;        }    }        }

       

    4. xml中綁定監聽:
      <Button android:id="@+id/button1" android:layout_height="wrap_content"          android:layout_width="wrap_content" android:onClick="mybuttonlistener"></Button>

       

      對應java代碼如下:
      Button btn = (Button) findViewById(R.id.button1);public void mybuttonlistener(View target){    //do something5     }

      從個人角度來講,不推薦使用第四種實現方式。

Android的按鈕單擊事件及監聽器的實現方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.