我在我的项目AndroidAnnotations和Dagger中使用。
我想通过Dagger将View(通过AndroidAnnotations注入Activity)注入其他类。
现在我有了这段代码,但我希望ActionBarDrawerToggle
获得@Injection
:
// MainActivity.java
@EActivity(R.layout.activity_main)
public class MainActivity extends ActionBarActivity {
@ViewById
DrawerLayout drawerLayout;
ActionBarDrawerToggle mMainDrawerToggle;
@AfterInject
void daggerInject() {
application.inject(this);
}
@AfterViews
void setupViews() {
mMainDrawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.drawable.ic_main_drawer,
R.string.main_drawer_open,
R.string.main_drawer_close);
}
}
我已经做了类似的事情,但它不起作用,因为Dagger不知道如何获得DrawerLayout对象。
// ApplicationModule.java
@Module(
library = true,
injects = MainActivity_.class
)
public class ApplicationModule {
private final MyApp application;
public ApplicationModule(MyApp application) {
this.application = application;
}
@Provides
ActionBarDrawerToggle provideActionBarDrawerToggle(DrawerLayout drawerLayout) {
return new ActionBarDrawerToggle(
application,
drawerLayout,
R.drawable.ic_main_drawer,
R.string.main_drawer_open,
R.string.main_drawer_close);
}
}
如何让Dagger注入ActionBarDrawerToggle
?
答案 0 :(得分:0)
这似乎不是Activity本身的真正依赖 - Activity是从它自己的视图创建DrawerLayout的那个。
如果真的必须这样做,你可以创建一个自定义的ActivityModule,它在其构造函数中包含DrawerLayout或Activity依赖项。这样可以分享片段和子视图。
@Module(...)
public class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides
ActionBarDrawerToggle provideActionBarDrawerToggle() {
//create the toggle and return it here
}
}
答案 1 :(得分:0)
我知道我已经迟到了,但问题是你错过了@Inject
之前的ActionBarDrawerToggle mMainDrawerToggle;
注释
答案 2 :(得分:0)
除非您只有一项活动,否则您首先需要的是活动模块和活动组件here's how。接下来,您需要在执行匕首注入之前实例化切换。如果这适合你,那么:
为您的活动中的视图创建一个getter。然后在你的模块中:
@Provides @Singleton
ActionBarDrawerToggle provideActionBarDrawerToggle() {
activity.getActionBarDrawerToggle()
}
现在你可以注入actionBarToggle,
@Inject ActionBarToggle toggle;