Java 如何对已在onCreate()方法中创建的视图使用dagger依赖项注入
我不熟悉依赖注入。我想避免使用静态方法。为了简单起见,我展示了只与此相关的代码 这是我的密码:Java 如何对已在onCreate()方法中创建的视图使用dagger依赖项注入,java,android,dagger-2,Java,Android,Dagger 2,我不熟悉依赖注入。我想避免使用静态方法。为了简单起见,我展示了只与此相关的代码 这是我的密码: public class MainActivity extends AppCompatActivity { private ImageView mFavorites_fab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan
public class MainActivity extends AppCompatActivity {
private ImageView mFavorites_fab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFavorites_fab = (ImageView) findViewById(R.id.favorites_fab);
}
void vibrateFab(Context context) { //Function to be called using DI
Log.v(TAG, "vibrate fab" +context);
Animation vibrateAnimation = AnimationUtils.loadAnimation(context, R.anim.vibrate);
mFavorites_fab.setAnimation(vibrateAnimation);
}
我想使用依赖项注入从另一个类调用VibractFab
函数
这就是我打电话的方式
模块:
@Module
public class MainActivity_Module {
@Provides
@ActivityScope
MainActivity providesMainActivity() {
return new MainActivity();
}
}
@Component(modules = MainActivity_Module.class)
@ActivityScope
public interface MainActivity_Component {
void inject(Nearby_Viewpager_Stops nearby_viewpager_stops);
}
public class Nearby_Viewpager_Stops extends Fragment {
@Inject
MainActivity mainActivity;
Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
MainActivity_Component component = DaggerMainActivity_Component.builder().mainActivity_Module(new MainActivity_Module()).build();
component.inject(Nearby_Viewpager_Stops.this);
mMainActivity.vibrateFab(mContext);
}
组件:
@Module
public class MainActivity_Module {
@Provides
@ActivityScope
MainActivity providesMainActivity() {
return new MainActivity();
}
}
@Component(modules = MainActivity_Module.class)
@ActivityScope
public interface MainActivity_Component {
void inject(Nearby_Viewpager_Stops nearby_viewpager_stops);
}
public class Nearby_Viewpager_Stops extends Fragment {
@Inject
MainActivity mainActivity;
Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
MainActivity_Component component = DaggerMainActivity_Component.builder().mainActivity_Module(new MainActivity_Module()).build();
component.inject(Nearby_Viewpager_Stops.this);
mMainActivity.vibrateFab(mContext);
}
另一个类:
@Module
public class MainActivity_Module {
@Provides
@ActivityScope
MainActivity providesMainActivity() {
return new MainActivity();
}
}
@Component(modules = MainActivity_Module.class)
@ActivityScope
public interface MainActivity_Component {
void inject(Nearby_Viewpager_Stops nearby_viewpager_stops);
}
public class Nearby_Viewpager_Stops extends Fragment {
@Inject
MainActivity mainActivity;
Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
MainActivity_Component component = DaggerMainActivity_Component.builder().mainActivity_Module(new MainActivity_Module()).build();
component.inject(Nearby_Viewpager_Stops.this);
mMainActivity.vibrateFab(mContext);
}
现在的问题是:在这一行中,mFavorites\u fab
为空,因为我正在使用主活动的新实例
mFavorites_fab.setAnimation(vibrateAnimation);
如何克服这个问题?很有趣。我不认为Dagger能给你们提供依赖类,它需要一个对象。 得到这个的方法是 *在应用程序中创建应用程序组件。 ApplicationComponent将具有模块提供程序。提供晶圆厂 从您的活动中访问AcitivityComponet,然后说inject到类中 现在您可以使用ActivityInjector方法来避免一些双极代码 我强烈推荐下面的例子
快乐编码 有趣。我不认为Dagger能给你们提供依赖类,它需要一个对象。 得到这个的方法是 *在应用程序中创建应用程序组件。 ApplicationComponent将具有模块提供程序。提供晶圆厂 从您的活动中访问AcitivityComponet,然后说inject到类中 现在您可以使用ActivityInjector方法来避免一些双极代码 我强烈推荐下面的例子
快乐编码 您认为只创建自己的Android框架的一部分(
returnnewmainActivity()
)是个好主意吗?您必须以其他方式获取活动。@DavidMedenjak您能告诉我如何以正确的方式获取活动吗?您认为只创建自己的Android框架的一部分(return new main activity()
)是个好主意吗?您必须以其他方式获取活动。@DavidMedenjak您能告诉我如何以正确的方式获取活动吗?