当前布局无法使用该方法。你需要使用策略模式。在你的库中定义一个名为LibA的类,并在其构造函数中添加一个类型为LibB的对象参数:
class LibA{
LibB b;
public LibA(LibB b)
this.b = b;
}
}
然后你可以在你的项目中重写LibB,并创建一个扩展LibB的类的LibA:
class ProjectB extends LibB{
}
LibA a = new LibA(new ProjectB());
回答Turbos的问题:
你想从你的库中启动项目活动。因此,将创建Intent
的代码移动到你的项目中,因为只有在你的项目中才知道要启动的Activity
的类型或名称。
你在评论中提到的解决方案(这里)在库项目中创建了Intent
,猜测应该启动的Activity
的名称。这并没有什么错,但不是一种优雅的解决方案。你只能启动遵循特定命名方案的Activities
。因此,你不能启动任意可见于你的项目中的Activities
,例如来自其他库的Activities
,其中你无法更改类的名称。
要将Intent
的创建移动到你的库中,你可以使用策略、模板或工厂方法模式等策略。参见维基百科上的设计模式,了解更多与你的库设计相匹配的(创造性的)模式。
一个简单的解决方案是:
创建一个抽象的LibraryActivity
,并从中扩展你的项目活动。 LibraryActivity
定义了一个抽象方法,返回Intent
。该抽象方法的实现在你的ProjectActivities
中完成。
abstract class LibActivity{
private void doSomething(){
startActivity(this.createIntent());
}
protected abstract Intent createIntent();
}
class ProjectActivity extends LibActivity{
protected Intent createIntent(){
return new Intent(ProjectActivity.this, AnyActivityYouWant.class);
}
}