我使用匕首2将FragmentManager和FragmentTransaction注入到我的活动中。我补充说,一切看起来都很好。
@Inject
FragmentManager fragmentManager;
@Inject
FragmentTransaction fragmentTransaction在我的活动中抛出一个关于重建的错误,如下所示:
错误:(21,10)错误:如果没有@ provided或@Produces-带注释的方法,就不能提供android.support.v4.app.FragmentManager。com.toranj.tyke.ui.MainActivity.fragmentManager注射了android.support.v4.app.FragmentManager,com.toranj.tyke.dagger.components.LotteryComponent.inject(activity)注射了com.toranj.tyke.ui.MainActivity
下面是模块
@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);
}
}我对使用匕首和依赖注入非常陌生,而且我可能忽略了其中的一点。任何有解释的回答都将帮助我理解注入,也是非常感谢的。
android.support.v4.app.FragmentManager.编辑:模块、组件和活动中使用的所有fragmentManagers都来自
发布于 2016-08-02 16:49:13
我想android.app.FragmentManager是在FragmentComponent中使用的。
应该使用android.support.v4.app.FragmentManager。
发布于 2016-08-03 03:59:57
从错误中我可以看到,您似乎正在使用另一个组件注入活动:LotteryComponent.java。
另外,请尝试更改此方法。
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction() {
return activity.getSupportFragmentManager().beginTransaction();
}至
@Provides
@PerActivity
public FragmentTransaction providesFragmentTransaction(FragmentManager fm) {
return fm.beginTransaction();
}我怀疑这将解决问题,但值得一试,至少您将从相同的源中始终检索对象。
发布于 2016-08-03 07:24:34
您应该注入实际要使用的类。
public interface FragmentComponent {
void inject(Activity activity);
}这将注入Activity,这是Android的一部分,没有任何@Inject注释字段。这个注入方法基本上是没有操作的。
Dagger在编译时生成依赖关系图。它不知道您突然尝试注入MainActivity并期望FragmentManager出现。
tl;dr
提供
public interface FragmentComponent {
void inject(MainActivity activity);
}而且它应该能工作。
https://stackoverflow.com/questions/38725983
复制相似问题