使用所有方法创建一个接口,例如MyCommonActivityInterface
public interface MyCommonActivityInterface {
public void sayHello();
public void sayGoodbye();
}
使用所有代码创建一个通用活动
public class MyCommonActivity implements MyCommonActivityInterface {
...
public void sayHello() {Log.d("MyCommonActivity", "says hello")};
public void sayGoodbye() {Log.d("MyCommonActivity", "says goodbye")};
...
}
现在您可以在两个活动中重用公共代码
public class MyActivity34 extends Activity {
MyCommonActivityInterface common = new MyCommonActivity();
public void sayHello() {common.sayHello()};
public void sayGoodbye() {common.sayGoodbye()};
}
public class MyActivity extends ActionBarActivity {
MyCommonActivityInterface common = new MyCommonActivity();
public void sayHello() {common.sayHello()};
public void sayGoodbye() {common.sayGoodbye()};
}
其实这个接口可以省略,但如果你需要在替代品或类似物之间进行交换,它会派上用场。
依赖注入的强大功能给我留下了深刻的印象,它可以让这类事情变得更加简洁。
有一个名为Dagger 的库添加了对android 的DI 支持。它的学习曲线有些陡峭,但对我来说这一切都是值得的。
在此示例中,您将能够执行以下操作:
@Singleton
public class MyCommonActivity {
// Example with context to show that it will be automagically injected
@Inject
public MyCommonActivity(@ForActivity Context context) {}
...
public void sayHello() {Log.d("MyCommonActivity", "says hello")};
public void sayGoodbye() {Log.d("MyCommonActivity", "says goodbye")};
...
}
public class MyActivity34 extends Activity {
@Inject MyCommonActivity common;
public void sayHello() {common.sayHello()};
public void sayGoodbye() {common.sayGoodbye()};
}
public class MyActivity extends ActionBarActivity {
@Inject MyCommonActivity common;
public void sayHello() {common.sayHello()};
public void sayGoodbye() {common.sayGoodbye()};
}
有很多独立的代码类,其中一些依赖于其他类,或者需要一个 Context 对象等,.. 只需在您需要的时间和地点添加 @Inject 行就可以节省很多代码行!
当我们添加它时,看看ButterKnife,它更简单,但也只适用于注入视图。仍然非常强大和整洁。