EventBus的使用

EventBus

EventBus是針一款對(duì)Android的發(fā)布/訂閱事件總線。它可以讓我們很輕松的實(shí)現(xiàn)在Android各個(gè)組件之間傳遞消息,并且代碼的可讀性更好,耦合度更低。

使用步驟

  1. 首先需要定義一個(gè)事件,如:
    public class MyEvent{
    //這里面可以寫需要調(diào)用的數(shù)據(jù)
    }

  2. 在需要訂閱事件的地方注冊(cè)事件,如:
    EventBus.getDefault().register(this);

  3. 產(chǎn)生事件,即發(fā)送事件,如:
    EventBus.getDefault().post(myEvent);

  4. 處理事件,在接受訂閱事件的地方處理獲取的事件,如:
    public void onEventMainThread(Event e){}

  5. 取消消息訂閱,如:
    EventBus.getDefault().unregister(this);

使用以上步驟就可以處理好一個(gè)普通的事件了。

特別場(chǎng)景

由于我們注冊(cè)事件的時(shí)候基本上是在onCreateView()或者在onCreate()方法中,這回導(dǎo)致有時(shí)候我們的代碼里接收不到發(fā)送來的事件。比如:當(dāng)你在BActivity中的onCreate()中注冊(cè)了事件,你再AActivity中post一個(gè)事件,但是由于你的BActivity
沒有創(chuàng)建,那么你就不會(huì)接收到事件,這時(shí)候就要使用粘性事件了。

Stickey事件使用步驟

  1. 定義好一個(gè)事件,如:public class MyEvent{
    //這里面可以寫需要調(diào)用的數(shù)據(jù)
    }
  2. 在需要訂閱的地方訂閱,如: EventBus.getDefault().registerSticky(this);此時(shí)訂閱這個(gè)事件,如果此activity沒有被創(chuàng)建,是不會(huì)走這個(gè)方法的,因此需要步驟三
  3. onEventMainThread(EventBus.getDefault().getStickyEvent(MyEvent.class));主動(dòng)獲取事件
  4. public void onEventMainThread(GotoMaterialEvent event) {//對(duì)事件進(jìn)行處理}
  5. 發(fā)送粘性事件 EventBus.getDefault().postSticky(new MyEvent());

由上面就可以完成黏性事件的處理了。

下面請(qǐng)看我的代碼:

  • 定義一個(gè)事件
public class GotoMaterialEvent extends BaseEvent {
    private int page;
    private int item;
    public GotoMaterialEvent(int page) {
        this.page = page;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getItem() {
        return item;
    }
    public void setItem(int item) {
        this.item = item;
    }
}
  • 訂閱事件
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     EventBus.getDefault().registerSticky(this);
     return super.onCreateView(inflater, container, savedInstanceState);
 }
  • 主動(dòng)獲取事件

onEventMainThread(EventBus.getDefault().getStickyEvent(GotoMaterialEvent.class));

  • 事件處理
public void onEventMainThread(GotoMaterialEvent event) {
      int id = event.getItem();
      for (int i = 0; i < categroyIds.size(); i++) {
          if (id == categroyIds.get(i)) {
              //公開課
              indicatorViewPager.setCurrentItem(i, true);
          } else if (id == categroyIds.get(i)) {
              //什么事acca
              indicatorViewPager.setCurrentItem(i, true);
          } else if (id == categroyIds.get(i)) {
              //新手指南
              indicatorViewPager.setCurrentItem(i, true);
          }
      }

  }
  • 發(fā)送事件
ll_home_acca_1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               GotoMaterialEvent event = new GotoMaterialEvent(2);
               event.setItem(2);
               EventBus.getDefault().postSticky(event);

           }
       });

以上是對(duì)粘性事件的處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、簡(jiǎn)介 EventBus是由greenrobot 組織貢獻(xiàn)的一個(gè)Android事件發(fā)布/訂閱輕量級(jí)框架。Even...
    Mr丶sorrow閱讀 15,431評(píng)論 0 13
  • EVentBus的使用: 簡(jiǎn)介下載地址使用步驟粘性事件例子 1.簡(jiǎn)介 EventBus是一個(gè)Android端優(yōu)化的...
    努力生活的西魚閱讀 439評(píng)論 0 0
  • 好久沒更新博客了,思來想去,時(shí)隔半年又重新了回來了 最近項(xiàng)目更新想用下greenrobot的eventbus,之前...
    Luke_單車閱讀 8,807評(píng)論 0 11
  • EventBus是一個(gè)Android平臺(tái)上的事件發(fā)送/訂閱框架,采用觀察者模式實(shí)現(xiàn),可以優(yōu)化組件間的信息傳遞過程。...
    華枯榮閱讀 5,080評(píng)論 2 3
  • 近期使用EventBus碰到點(diǎn)問題順便分享下,正常情況下使用eventbus進(jìn)行通訊在需要發(fā)送消息的地方Event...
    下一個(gè)明天我的_d1d1閱讀 450評(píng)論 0 0

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