1

我在我的项目中使用 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);
    }
}

我怎样才能让它ActionBarDrawerToggle被 Dagger 注入?

4

3 回答 3

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
  }
}
于 2014-03-05T16:18:16.587 回答
0

我知道我迟到了,但问题是你@Inject之前错过了注释ActionBarDrawerToggle mMainDrawerToggle;

于 2015-10-07T23:40:25.617 回答
0

你首先需要的是一个活动模块和一个活动组件,除非只有一个活动。接下来,您需要在进行匕首注入之前实例化切换。如果这对你有用,那么:

为您的活动中的视图创建一个吸气剂。然后在你的模块中:

@Provides @Singleton
  ActionBarDrawerToggle provideActionBarDrawerToggle() {
    activity.getActionBarDrawerToggle()
  }

现在你可以注入actionBarToggle,

 @Inject ActionBarToggle toggle;
于 2015-10-13T02:39:27.363 回答