java - 如何对已在 onCreate() 方法中创建的 View 使用 dagger 依赖注入(inject)

标签 java android dagger-2

我是依赖注入(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/

相关文章:

android - Dagger 不注入(inject) Activity

java - Kotlin Cast EditText、TextView 来查看

java - 使用不同端口与 Java 进行 SSH 连接

java - 为 DynamicReports 创建通用文件

java - 如何从实时数据中删除观察者,以便在导航回 fragment 时不会显示两次

java - Dagger 中方法上的单例

Java - 收集过去值的最佳方法

android - 无法从真实设备上的 Assets 'index.android.bundle' 加载脚本

java - Android项目上的延迟函数

dagger-2 - 为什么不安装 AndroidInjectionModule 仍然可以工作?