2016-01-19 112 views
5

我正在構建我的第一個庫模塊,我正在計劃爲多個項目填充可重用代碼。我的第一個障礙是,我需要能夠從庫模塊的主應用程序中啓動一項活動。從Android庫模塊啓動主應用程序中的活動

例如,我有一個啓動畫面活動。它運行2秒,然後啓動主要活動。我相信我可以重新使用這個啓動畫面活動,並且我想將它放入我的庫模塊中。但是,我不確定如何從圖書館開展主要活動。

Mainfest在主應用程序設置:

<activity 
    android:name="com.example.myLibraryModule.SplashScreen" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

清單推出目前駐留在我的庫模塊的啓動畫面。

由於庫是主應用程序的依賴關係,而不是其他方式,所以我不知道如何從我的SplashScreenActivity啓動MainActivity。這不是那麼容易,因爲:

Intent i = new intent(this, MainActivity.class); 
startActivity(i); 

回答

2

我會從你的主清單中刪除SplashScreenActivity並創建一個protected方法稱爲startMainActivity()或相似。在您通常希望開始MainActivity的地方在您的SplashScreenActivity基類中調用此方法。

然後,在您的主項目中,我將繼承SplashScreenActivity的子類並覆蓋startMainActivity()方法以執行您希望的行爲。不要忘記把你的SplashScreenActivity的子類放在主項目的清單中。

通過這種方式,您可以在所有可能依賴它的項目中輕鬆地重用SplashScreenActivity的行爲。

+0

澄清,我從我的MODULE的清單中刪除SplashScreenActivity?然後,在我的主應用程序中創建啓動畫面活動,以擴展SplashScreenActivity?然後,我將這個'startMainActivity()'方法內的啓動畫面活動中通常會發生的所有處理數據。從那裏開始我的主要活動。編輯:在我的主要項目的清單中,我將模塊中的SplashScreenActivity替換爲我在主項目中創建的活動? –

+0

是的,沒錯。不要忘記在你的基本'SplashScreenActivity'內調用'startMainActivity()'方法,這時你通常會開始你的活動。 –

+1

好的,這並不是一個如此痛苦的方式來完成這一點。我已經測試了這個解決方案並且它可以工 –

0

你不應該那樣做。你強烈地將這兩個類聯繫起來(從lib開始活動的類和要加載的活動)

相反 - 你可以在應用程序中設置一個廣播接收,它將接收一個intent對象並開始活動如果將來您希望遠程啓動其他活動或服務 - 您可以使用同一個廣播接收器接收來自您的lib的請求,您只需將數據添加到Intent的額外的集合,包含要打開的活動(或課程的任何其他任務)。

該解決方案去將你的lib和應用程序,這是更好的建築設計wize(在我看來)。

祝你好運!

+0

如果您希望將每個應用程序從「SplashScreenActivity」轉換爲您的應用程序的「MainActivity」動畫,這可能會變得有點不可擴展。還涉及在Manifest中註冊這樣的'BroadcastReceiver',這對於這個簡單的問題來說是IMO過度的。 –

+0

這確實是一個意見問題。這個解決方案並不複雜。它的實施相對簡單,而且有其好處。我想h_k需要權衡利弊。 – FunkSoulBrother

相關問題