我是依赖注入(inject)的新手。我想避免使用静态方法。为了简单起见,我只显示相关的代码。
这是我的代码:
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);
}
我想使用依赖注入(inject)从另一个类调用 vibrateFab
函数
这就是我尝试调用的方式。
模块:
@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_fab
为空,因为我正在使用主 Activity 的新实例。
mFavorites_fab.setAnimation(vibrateAnimation);
如何克服这个问题?
最佳答案
有趣。我不认为 Dagger 可以给你依赖 .class 它需要一个对象。 获得这个的方法是 * 在您的应用程序中创建一个应用程序组件。 ApplicationComponent 将有一个模块提供者。提供vibrateFab;
从您的 Activity 中访问 AcitivityComponet,然后注入(inject)到类中 现在您可以使用 ActivityInjector 方法来避免一些二值代码
我强烈推荐以下示例 http://www.vogella.com/tutorials/Dagger/article.html#exercise_androiddagger
编码愉快!!
关于java - 如何对已在 onCreate() 方法中创建的 View 使用 dagger 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081306/