2016-01-19 159 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

相关问题