最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 的回調(diào)事件詳解

 更新時間:2016年08月14日 14:55:34   投稿:hebedich  
這篇文章主要介紹了Android 的回調(diào)事件的相關(guān)資料,相當(dāng)?shù)脑敿?xì),有需要的小伙伴可以參考下

看見網(wǎng)上一些回調(diào)的解釋都很復(fù)雜的,特別基于Android的自定義回調(diào),感覺一頭霧水,于是乎,我也寫了這篇基于我對回調(diào)的解釋。

先來看一個簡單的例子:
有兩個類 ClassA ,和 ClassB, ClassA調(diào)用ClassB里面的方法,

public class ClassB {

  public void method_from_classB(){
    
    for(int i=0;i<10;i++)
      System.out.print("..."+i);
  }
}
public class ClassA {

   
  
  public static void main(String args[]){
   
    ClassB classB = new ClassB();
    
    classB.method_from_classB();
  }
}

輸出:

...0...1...2...3...4...5...6...7...8...9

臥槽,哪個傻逼寫的博文,侮辱我的智商不是嗎,嘻嘻,是為了做比較,接下來看看利用回調(diào), ClassA 是怎么調(diào)用 ClassB中的 方法的,注意是回調(diào):

讓ClassB 實現(xiàn) ClassA定義的接口

public class ClassB implements ClassA.ClassAInterface{

  public ClassB(){
    
    new ClassA().RegisterInterface(this);
    System.out.println("...ClassB..."+this);
  }

  @Override
  public void method_from_interface() {

    for(int i=0;i<10;i++)
      System.out.print("..."+i);
  }
  
  /*  public void method_from_classB(){
  
  for(int i=0;i<10;i++)
    System.out.print("..."+i);
  }*/
}

ClassA里面定義接口和抽象方法:

public class ClassA {

  public static ClassAInterface classAInterface;
  
  public interface ClassAInterface{
    
    public void method_from_interface();
  }
  public void RegisterInterface(ClassAInterface a_interface){

    this.classAInterface = a_interface;
    System.out.println("...a_interface..."+a_interface);
  }
 
  public static void main(String args[]){
   
    ClassB classB = new ClassB();// 標(biāo)記@1,最后面做解釋
    //classB.method_from_classB();
    System.out.println("...classAInterface..."+classAInterface);
     if(classAInterface != null){
        classAInterface.method_from_interface();
      }
  }
}

輸出:

...0...1...2...3...4...5...6...7...8...9

整理下,也就是 我在ClassA里面定義了一個接口(interface),接口里面又定義了一個方法,但沒有方法體,也就不做任何事情。

當(dāng) ClassA 執(zhí)行到 mian() 函數(shù)時,就會調(diào)用接口的方法,但前面講了,接口的方法沒有實現(xiàn)具體的事情,它就會找到 ClassB 里面對應(yīng)的 方法,來實現(xiàn)具體的事情。

呦呦呦,ClassA 的接口的方法是怎么找到 ClassB 的方法,難道會上天???

也就是下面分析這句代碼是怎么上天的:

// 利用接口的回調(diào)實現(xiàn) ClassB中 的方法的 具體事情

 classAInterface.method_from_interface();

我在上面的代碼中用 System.out.println 打印出了日志做分析:

第一個(ClassA中的方法):

  public void RegisterInterface(ClassAInterface a_interface){

    this.classAInterface = a_interface;
    System.out.println("...a_interface..."+a_interface);
  }

輸出:

...a_interface...ClassB@3ddb8962

第二個:

public ClassB(){
    
    new ClassA().RegisterInterface(this);
    System.out.println("...ClassB..."+this);
  }

輸出:

...ClassB...ClassB@3ddb8962

第三個:

System.out.println("...classAInterface..."+classAInterface);
     if(classAInterface != null){
        classAInterface.method_from_interface();
      }

輸出:

...classAInterface...ClassB@3ddb8962

看到這里是不是恍然大悟呢 ,輸出都是 “ ClassB@3ddb8962 ” 也就是ClassB 對象的引用!??!

??!接口只不過是將 ClassB 對象的引用 傳到 ClassA中而已,那這句會上天的語句是不是很好解釋了呢。

       classAInterface.method_from_interface();

相當(dāng)于  ClassB@3ddb8962.method_from_interface();

這是不是跟最上面到的代碼:

    ClassB classB = new ClassB();  
    classB.method_from_classB();

一樣呢,這也是為什么我最開始要舉這個例子的原因?。。?/p>

相信看到這里應(yīng)該理解了接口的回調(diào)是怎么回事了吧。
但有一點又糊涂了,為什么 要接口回調(diào)這么麻煩的,最上面的在ClassA里面執(zhí)行:

    ClassB classB = new ClassB();  
    classB.method_from_classB();

不是照樣可以 ClassA 調(diào)用 ClassB 里面的 方法。。。。但要是ClassA 要調(diào)用ClassC,ClassD ...,里面的方法呢,是不是還要改變ClassA里面的代碼,實例化ClassC,ClassD ... 的對象,顯然是不好的,要是使用接口那就不用改變ClassA 里面的代碼了,任何類只要實現(xiàn)ClassA 里面的接口就可以.

解釋一下 標(biāo)記@1 :

上面那段話好像跟 標(biāo)記@1 違背了,在 ClassA 里面確實也需要實例化 ClassB對象。

因為要 【利用】 初始化的時候執(zhí)行構(gòu)造方法里面的代碼:

public ClassB(){
    // 相當(dāng)于回調(diào)事件的注冊,初學(xué)者出現(xiàn)回調(diào)空指針很有可能這邊忘記‘注冊'了
    new ClassA().RegisterInterface(this);
  }

將this 傳遞給 ClassA ,作用也就是 上面利用 日志分析的作用。

但再 Android 開發(fā)中救你不必這樣了,
可以在 Activity 的初始化時執(zhí)行:

@Override
  protected void onCreate(Bundle savedInstanceState) {

     // 相當(dāng)于回調(diào)事件的注冊,初學(xué)者出現(xiàn)回調(diào)空指針很有可能這邊忘記‘注冊'了
    new ClassA().RegisterInterface(this);
}

在Android 開發(fā)中 ClassA 里面的 mian() 函數(shù)可以用事件來代替,觸發(fā):
如:

button.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        // TODO 自動生成的方法存根
        if(classAInterface != null){
        classAInterface.method_from_interface();
      }
    });

相關(guān)文章

  • Android TextView高級顯示技巧實例小結(jié)

    Android TextView高級顯示技巧實例小結(jié)

    這篇文章主要介紹了Android TextView高級顯示技巧,結(jié)合實例形式總結(jié)分析了Android TextView控件進(jìn)行文字與圖片顯示的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • Android中Service服務(wù)詳解(二)

    Android中Service服務(wù)詳解(二)

    這篇文章主要介紹了Android中Service服務(wù),在前面一篇的基礎(chǔ)上進(jìn)一步分析了Android Service的綁定服務(wù)與解綁服務(wù)的相關(guān)使用技巧,需要的朋友可以參考下
    2016-01-01
  • Android仿京東手機(jī)端類別頁

    Android仿京東手機(jī)端類別頁

    這篇文章主要為大家詳細(xì)介紹了Android仿京東手機(jī)端類別頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Android編程實現(xiàn)號碼歸屬地查詢的方法

    Android編程實現(xiàn)號碼歸屬地查詢的方法

    這篇文章主要介紹了Android編程實現(xiàn)號碼歸屬地查詢的方法,涉及Android xml文件的發(fā)送及WebService的操作技巧,需要的朋友可以參考下
    2016-01-01
  • Android中獲取手機(jī)屏幕大小的方法

    Android中獲取手機(jī)屏幕大小的方法

    這篇文章主要介紹了Android中獲取手機(jī)屏幕大小的方法,Android開發(fā)需要獲得屏幕的寬高,本文為大家解析 Android中如何獲取手機(jī)屏幕大小,需要的朋友可以參考下
    2015-12-12
  • Android自定義控件打造絢麗平行空間引導(dǎo)頁

    Android自定義控件打造絢麗平行空間引導(dǎo)頁

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件打造絢麗平行空間引導(dǎo)頁,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android中3種全屏方法及3種去掉標(biāo)題欄的方法

    Android中3種全屏方法及3種去掉標(biāo)題欄的方法

    這篇文章主要介紹了Android中3種全屏方法及3種去掉標(biāo)題欄的方法,二個問題各給出了3種解決方法,并給出實例代碼,需要的朋友可以參考下
    2015-06-06
  • 詳解Android App中ViewPager使用PagerAdapter的方法

    詳解Android App中ViewPager使用PagerAdapter的方法

    這篇文章主要介紹了詳解Android App中ViewPager使用PagerAdapter的方法,同時附帶了一個ViewPager的PagerAdapter不能更新數(shù)據(jù)的問題解決方法,需要的朋友可以參考下
    2016-03-03
  • android微信支付源碼分享

    android微信支付源碼分享

    這篇文章主要為大家詳細(xì)介紹了android微信支付源碼,具有一定的實用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android實現(xiàn)雙擊TitleBar回頂部的功能示例代碼

    Android實現(xiàn)雙擊TitleBar回頂部的功能示例代碼

    一個簡單易用的導(dǎo)航欄TitleBar,可以輕松實現(xiàn)IOS導(dǎo)航欄的各種效果,下面這篇文章主要給大家介紹了關(guān)于Android如何實現(xiàn)雙擊TitleBar回頂部功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評論

溆浦县| 察哈| 思茅市| 兰溪市| 邹平县| 淮阳县| 惠东县| 彭泽县| 福清市| 定州市| 渝北区| 三河市| 天柱县| 铁岭县| 潜江市| 宜兴市| 盐亭县| 平泉县| 孝感市| 靖边县| 昌乐县| 晴隆县| 肥乡县| 仙游县| 桐庐县| 崇州市| 曲麻莱县| 镇康县| 武功县| 平泉县| 绥芬河市| 新丰县| 楚雄市| 红河县| 当阳市| 高要市| 揭东县| 祁东县| 岱山县| 靖江市| 福建省|