監(jiān)聽事件-----菜鳥入門

在Android 應用開發(fā)過程中,常用監(jiān)聽事件如下:

  • (1) ListView事件監(jiān)聽
    setOn ItemSelectedListener:鼠標滾動時觸發(fā)
    setOnItemClickListener: 點擊時觸發(fā)
  • (2 )EditText 事件監(jiān)聽
    setOnKeyListener: 獲取焦點時觸發(fā)
  • (3) RadioGroup事件監(jiān)聽
    setOnCheckedChangeListener: 點擊時觸發(fā)
  • (4) CheckBox事件監(jiān)聽
    setOnCheckedChangeListener :點擊時觸發(fā)
  • (5 )Spinner事件監(jiān)聽
    setOnltemSelectedListener:點擊時觸發(fā)
  • (6) DatePicker 事件監(jiān)聽
    onDateChangedListener: 日期改變時觸發(fā)
  • (7 )DatePickerDialog 事件監(jiān)聽
    onDateSetListener:設(shè)置日期時觸發(fā)
  • (8) TimePicker 事件監(jiān)聽
    onTimeChangedListener:時間改變時觸發(fā)
  • (9 )TimePickerDialog 事件監(jiān)聽
    onTimeSetListener: 設(shè)置時間時觸發(fā)
  • (10)Button.ImageButton 事件監(jiān)聽
    setOnClickListener: 點擊時觸發(fā)
  • (11)Menu 事件監(jiān)聽
    onOptionsltemSelected; 點擊時觸發(fā)
  • (12 )Gallery 事件監(jiān)聽
    setOnItemClickListener: 點擊時觸發(fā)
  • (13 )GridView 事件監(jiān)聽
    setOnltemClickListener: 點擊時觸發(fā)

實現(xiàn)事件監(jiān)聽器的方法:

內(nèi)部類形式
外類類形式
Activity本身作為事件監(jiān)聽器類
匿名內(nèi)部類形式
直接綁定到標簽
內(nèi)部類形式

內(nèi)部類形式

public class Test extends Activity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.about);
    MyButtonlistener listener = new MyButtonlistener();
    button.setOnClickListener(listener);
}
class MyButtonlistener implements View.OnClickListener{
    @Override
    public void onClick(View v) {
        //相關(guān)事件處理
    }
  }
}

外部類形式

Test類

public class Test extends Activity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.about);
    MyButtonlistener listener = new MyButtonlistener();
    button.setOnClickListener(listener);
    } 
}

MyButtonlistener類

public class MyButtonlistener implements View.OnClickListener {
@Override
public void onClick(View v) {
    //事件處理
  }
}

Activity本身作為事件監(jiān)聽器類

public class Test extends Activity implements View.OnClickListener{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.about);
    button.setOnClickListener(this);

    }

@Override
public void onClick(View v) {
    //事件處理
  }
}

匿名內(nèi)部類形式

public class Test extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.about);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //事件處理
        }
    });
    }
}

直接綁定到標簽

在xml的布局文件中加入onClick屬性,設(shè)置相關(guān)的方法
這里寫圖片描述


定義一個方法,記得參數(shù)是View
這里寫圖片描述


轉(zhuǎn)載 : https://blog.csdn.net/lyf970419/article/details/80762534
轉(zhuǎn)載:http://blog.sina.com.cn/s/blog_b9fc6c1f0102vg1g.html

第一種:匿名內(nèi)部類作為事件監(jiān)聽器類

Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){
  public void onClick(View v){
System.out.println(“匿名內(nèi)部類作為事件監(jiān)聽類”);
  }
});

大部分時候,事件處理器都沒有什么利用價值(可利用代碼通常都被抽象成了業(yè)務(wù)邏輯方法),因此大部分事件監(jiān)聽器只是臨時使用一次,所以使用匿名內(nèi)部類形式的事件監(jiān)聽器更合適,實際上,這種形式是目前是最廣泛的事件監(jiān)聽器形式。上面的程序代碼就是匿名內(nèi)部類來創(chuàng)建事件監(jiān)聽器的?。。?br> 對于使用匿名內(nèi)部類作為監(jiān)聽器的形式來說,唯一的缺點就是匿名內(nèi)部類的語法有點不易掌握,如果讀者java基礎(chǔ)扎實,匿名內(nèi)部類的語法掌握較好,通常建議使用匿名內(nèi)部類作為監(jiān)聽器。

第二種:內(nèi)部類作為監(jiān)聽器

 public class ButtonTest extends Activity{
 protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
   this.setContentView(R.layout.main);

   Button button =(Button) findViewById(R.id.button);
   MyButton listener=new MyButton();
   Button.setOnClickListener(listener);
}
  Class MyButton implements OnClickListener{
 public void onClick(View v){
   System.out.println(“內(nèi)部類作為事件監(jiān)聽器”)
  }
}
}

將事件監(jiān)聽器類定義成當前類的內(nèi)部類優(yōu)點:
1、使用內(nèi)部類可以在當前類中復用監(jiān)聽器類,因為監(jiān)聽器類是外部類的內(nèi)部類
2、所以可以自由訪問外部類的所有界面組件。這也是內(nèi)部類的兩個優(yōu)勢。上面代碼就是內(nèi)部類的形式?。?/p>

第三種:Activity本身作為事件監(jiān)聽器

public class ButtonTest extends Activity implements OnClickListener{
 protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
   this.setContentView(R.layout.main);

   Button button =(Button) findViewById(R.id.button);
    Button.setOnClickListener(this);
}
Public void onClick(View v){
 System.out.println(“activity本身作為監(jiān)聽器”);
  }
}

作為監(jiān)聽器類,可以直接在activity類中定義事件處理器方法,這種形式非常簡潔。但這種做法有兩個缺點:(1)這種形式可能造成程序結(jié)構(gòu)混亂。Activity的主要職責應該是完成界面初始化;但此時還需包含事件處理器方法,從而引起混亂。(2)如果activity界面類需要實現(xiàn)監(jiān)聽器接口,讓人感覺比較怪異。
上面的程序讓Activity類實現(xiàn)了OnClickListener事件監(jiān)聽接口,從而可以在該Activity類中直接定義事件處理器方法:onClick(view v),當為某個組件添加該事件監(jiān)聽器對象時,直接使用this作為事件監(jiān)聽器對象即可。

第四種:外部類作為監(jiān)聽器
ButtonTest類:

public class ButtonTest extends Activity{
 protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
   this.setContentView(R.layout.main);
   Button button=(Button) findViewById(R.id.button);
   Button.setOnClickListener(new MyButtonListener(“外部類作為事件監(jiān)聽類”));
}
}

當用戶單擊button按鈕時,程序?qū)|發(fā)MyButtonListener監(jiān)聽器
外部MyButtonListener類

public class MyButtonListener  implements OnClickListener{
 private String str;
 public MyButtonListener(String str){
super();
this.str=str;
 }
 Public void onClick (View v) {
 System.out.println(str);
 }
}

使用頂級類定義事件監(jiān)聽器類的形式比較少見,主要因為如下兩個原因:
1、事件監(jiān)聽器通常屬于特定的gui界面,定義成外部類不籃球提高程序的內(nèi)聚性。
2、外部類形式的事件監(jiān)聽器不能自由訪問創(chuàng)建gui界面的類中的組件,編程不夠簡潔。
但如果某個事件監(jiān)聽器確實需要被多個gui界面所共享,而且主要是完成某種業(yè)務(wù)邏輯的實現(xiàn),則可以考慮使用外部類的形式來定義事件監(jiān)聽器類。

第五種:直接綁定到標簽
android還有一種更簡單的綁定事件監(jiān)聽器的的方式,直接在界面布局文件中為指定標簽綁定事件處理方法。
對于很多Android標簽而言,它們都支持如onClick、onLongClick等屬性,這種屬性的屬性值就是一個形如xxx
(View source)
的方法的方法名。在布局文件中為button添加屬性,如一代碼:

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
android:onClick=”clickHandler” />

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

public class ButtonTest extends Activity{
 protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
   this.setContentView(R.layout.main);
 }
 Public void clickHandler(View source) {
  System.out.println(“直接綁定在標簽上的按鈕被點擊了”);
   }
  } 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在Android 應用開發(fā)過程中,常用監(jiān)聽事件如下: (1) ListView事件監(jiān)聽setOn ItemSele...
    古拉啦啦閱讀 661評論 0 1
  • 與界面編程緊密相關(guān)的就是事件處理機制,當用戶在程序界面上執(zhí)行各種操作時,應用程序必須為用戶動作提供響應動作,這種響...
    GB_speak閱讀 2,377評論 0 3
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,701評論 1 11
  • 由于是按新標日課本的順序整理日劇臺詞,因此臺詞中涉及的本課尚未學到的高級語法將在以后總結(jié)。 ...
    鄧瑜卿閱讀 1,792評論 4 8
  • 千張中含有豐富蛋白質(zhì),而且干張蛋白屬完全蛋白,不僅含有人體必需的8種氨基酸,而且其比例也接近人體需要,營養(yǎng)價值較高...
    輔食SoEasy閱讀 611評論 0 1

友情鏈接更多精彩內(nèi)容