2015-12-21 76 views
3

我有一個android應用程序項目,也有一些android庫項目。每個圖書館項目都有自己的活動和資源。我已經實現了NavigationDrawer並希望在所有活動中都擁有它,所以我創建了一個具有抽屜的基礎項目(android庫項目)(按照此答案中的指導:Same Navigation Drawer in different Activities)。然後,這個想法是,每個子項目(Android庫項目)將從基地擴展,但在這一點上,我正在打循環引用問題。如何避免項目之間的循環引用?

我有一個類似的結構,因爲這形象:

flow_diagram

有沒有問題,有子項目每個活動從基礎庫擴展,但問題是,基本庫還需要知道的活動(因此循環引用),這樣我就可以在NavigationDrawer處理點擊,類似的東西:

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     switch (position) { 
      case 0: 
       Intent intent = new Intent(this, SubProjectOneActivityOne.class); 
       startActivity(intent); 
       finish(); 
       break; 
      case 1: 
       Intent intent1 = new Intent(this, SubProjectOneActivityTwo.class); 
       startActivity(intent1); 
       break; 
      case 2: 
       Intent intent2 = new Intent(this, SubProjectTwoActivityOne.class); 
       startActivity(intent2); 
       break; 
      default: 
       break; 
    } 
}}); 

所以此刻我打與THI一個死衚衕的方法。是否有可能超載子項目中的點擊事件?有人有其他建議嗎?

+0

我通過提供一個'router'對象來處理這個問題。基礎項目可以公開那個,其他每個模塊都可以註冊一個路由。這些路線可以執行可能啓動或可能不啓動活動的動作。 – daentech

+0

@daentech你能分享更多的信息和可能的代碼嗎? – Apostrofix

+0

以下是一些示例代碼。我希望它能夠編譯,但我刪除了一些不必要的代碼。你可以在你的基礎項目中將你的路線命名爲常量,並在其他項目中引用它們? https://gist.github.com/daentech/f372f3a6529d08979f1c這也可以使用'/ route/'來處理通配符路由,並將數據作爲'getData()' – daentech

回答

2

我已經使用路由機制解決了這個問題(以及其他一些問題)。

我的解決辦法是在這個要點:
https://gist.github.com/daentech/f372f3a6529d08979f1c

它可以讓你通過打開這些命名路由基礎上添加字符串名稱的路線,無論是推出的活動或回調。

您的基礎項目可以共享其他項目可以注入的單例路由器對象。這些子項目中的每一個都可以將它們的路由添加到路由器,並且基礎項目不需要知道這些路由的作用,只需知道它們的名稱。

你也可以使用通配符路由,但我打算在某些時候更新它以處理路由變量並允許URL。

有關像這樣的路由的好處是您可以處理從應用程序中的任何位置到其他任何地方的路由,甚至可以從通知被輕叩的地方處理。

+0

我不確定我能理解如何使用它。我已經將'ApplicationRouter'和接口添加到基本庫,但'SyncStateContract.Constants.ACTIVITY_PATH'處出現錯誤。然後我不確定如何在其他項目中使用它。你能否詳細說明一下? – Apostrofix

+0

是否還有其他項目庫模塊?在Android Studio中? – daentech

+0

其中一個是主要應用程序,其他所有庫都是庫模塊,包括基本庫。 – Apostrofix