【发布时间】:2016-08-02 16:33:11
【问题描述】:
我正在使用 dagger 2 将 FragmentManager 和 FragmentTransaction 注入到我的 Activity 中。 一切看起来都很好,直到我添加
@Inject
FragmentManager fragmentManager;
@Inject
FragmentTransaction fragmentTransaction
进入我的活动,它在重建时引发错误,如下所示:
Error:(21, 10) 错误:如果没有 @Provides- 或 @Produces-annotated 方法,则无法提供 android.support.v4.app.FragmentManager。 android.support.v4.app.FragmentManager 在注入 com.toranj.tyke.ui.MainActivity.fragmentManager com.toranj.tyke.ui.MainActivity 被注入 com.toranj.tyke.dagger.components.LotteryComponent.inject(活动)
这是模块:
@Module
public class FragmentModule {
FragmentActivity activity;
public FragmentModule(FragmentActivity activity) {
this.activity = activity;
}
@Provides
@PerActivity
public FragmentManager providesFragmentManager() {
return activity.getSupportFragmentManager();
}
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction() {
return activity.getSupportFragmentManager().beginTransaction();
}
}
这是组件:
@PerActivity
@Component(modules = FragmentModule.class)
public interface FragmentComponent {
void inject(Activity activity);
FragmentManager fragmentManager();
FragmentTransaction fragmentTransaction();
}
这是我的活动:
public class MainActivity extends AppCompatActivity {
@Inject
FragmentManager fragmentManager;
@Inject
FragmentTransaction fragmentTransaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentComponent fragmentComponent = DaggerFragmentComponent.builder()
.fragmentModule(new FragmentModule(this))
.build();
fragmentComponent.inject(this);
}
}
我对使用 dagger 和依赖注入非常陌生,我可能错过了那里的某个地方。任何带有解释的答案都将帮助我理解注入,也非常感谢。
编辑:模块、组件和活动中使用的所有fragmentManager都来自android.support.v4.app.FragmentManager。
【问题讨论】:
-
必须在Activity、Component和Module中使用同一个FragmentManager,检查包。
-
@IsmaelDiVita 他们都来自 android.support.v4.app.FragmentManager 包
-
你有没有机会用另一个组件注入一个活动?从错误中看起来像这样:LotteryComponent.java
标签: java android dependency-injection dagger-2 dagger