Android事件驅動程式設計(二)

douxingxiang發表於2015-03-10

前篇文章我們簡短地介紹了事件驅動程式設計。現在我們看下EventBus中進行這些基本操作的例項程式碼。

首先,我將展示事件驅動程式設計中扮演中心角色的實體。參考從EventBus倉庫中取得的圖片。

一個事件匯流排(Event Bus)。這是連線其他實體的中心通訊通道。

一個事件(Event)。這是發生的動作,字面上可以是任何東西(應用啟動,收到資料,使用者互動…)。

一個訂閱者訂閱者監聽事件匯流排。如果檢測到事件發生,它將會觸發。

一個釋出者,將事件傳送到事件匯流排

有程式碼有真相,下面看下一個簡單例子:

  • 應用載入兩個fragment。
  • 第二個片段包含一個TextView,按鈕點選時將會更新。
  • 新的Fragment加到場景中時,ActionBar標題會變化。

宿主Activity

宿主Activity需要在onCreate方法中註冊EventBus。

宿主Activity現在準備好從匯流排中讀取資料了。我們也需要在onDestroy方法中登出匯流排。

Activity可以捕獲兩種不同事件:一個更新ActionBar標題,另一個載入第一個fragment。我們寫兩個onEvent來處理事件:

事件

每個事件都需要在類中宣告。事件中可以包含變數。

碎片

現在我們需要建立fragment。第一個fragment包含一個按鈕,可以開啟第二個;第二個包含一個按鈕,點選會更新TextView。片段也需要註冊和登出EventBus,為了結構更簡潔,所有的東西將會封裝在一個BaseFragment中。

現在我們來建立更多動作。第一個Fragment將會開啟第二個,函式如下:

注意,這裡我使用了ButterKnife表示法。它可以生成更簡潔的程式碼,如果你還沒用過,現在開始用吧。

第二個Fragment中的按鈕將會向EventBus傳送一個事件來改變TextView。

第二個Fragment也需要監聽這個事件,這樣它收到事件時,可以相應改變文字。

我們建立了一個包含兩個Fragment的基本應用,它們通過事件通訊,其中一個通過事件來更新。我已經把程式碼提交到GitHub上,你可以檢出看看。

關鍵問題是怎麼提升一個事件驅動架構。下篇文章我將提出一個簡潔易懂的架構,來支援Anroid中的事件驅動程式設計。

相關文章