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您能告诉我如何以正确的方式获取活动吗?