在您的子/非 lib 项目中,创建一个从 lib 项目(父)中的活动扩展的新活动(我们称之为子活动)。然后覆盖您要修改的方法。
在子项目的清单中,您将需要添加子活动并(我假设)通过为其提供适当的意图过滤器使其成为启动活动。
如果它不是启动活动,那么您可能还会遇到库项目中试图启动活动的标准(非覆盖)版本的意图问题。在使用一种“动态”意图系统之前,我已经克服了这个问题,我不是硬编码意图的类类型,而是从返回类型的 Application 对象中获取它。
例如
在图书馆项目中:
public class MainActivity extends Activity {
private void launchOverideableActivity(){
MyApp app = (MyApp) getApplication();
Intent i = new Intent(this, app.getIntentClassType());
startActivity(i);
}}
并覆盖应用程序对象,以便您可以提供此动态类类型:
public class MyApp extends Application {
public Class getIntentClassType(){
return MainActivity.class;
}}
然后在您的子项目中,扩展您的活动并进行自定义工作。但也覆盖库项目中的应用程序对象并覆盖您的方法,但返回您覆盖的活动类类型:
public class OveriddenApp extends MyApp {
@Override
public Class getIntentClassType() {
return MyOveriddenActivity.class;
}}
像这样从库项目中扩展活动有点笨拙,但从长远来看,它确实允许更清晰的代码分离,所以在我看来,这一点编码开销是值得的。
我很想知道是否有更优雅的方式来做到这一点......