How to inject dependencies into any kind of object with Dagger2?

后端 未结 1 1292
离开以前
离开以前 2021-02-05 18:19

According to http://konmik.github.io/snorkeling-with-dagger-2.html i could just add

inject(Anything anything)

into AppComponent.java, but this

1条回答
  •  青春惊慌失措
    2021-02-05 18:54

    Inject child fragments instead of BaseFragment. In your case:

    public class ListFragment extends BaseFragment {
    
        @Inject ListFragmentPresenterImpl listFragmentPresenter;
    
        public static ListFragment newInstance(){
            ListFragment result = new ListFragment();
            return result;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ((MainActivity)getActivity()).getComponent().injectFragment(this);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View rootView = inflater.inflate(R.layout.list_fragment, container, false);
            Log.d("",listFragmentPresenter.sayHello());  // NPE HERE
            return rootView;
        }
    }
    

    And in your Component class:

    @AScope
    @Component(dependencies = ApplicationComponent.class,
               modules = ActivityModule.class)
    interface ActivityComponent {
        void injectActivity(MainActivity activity);
        void injectFragment(ListFragment fragment);
        // Put any more injects here, if BaseFragment has
        // any other children that need to be injected, for example:
        void inject(MapFragment fragment);
        void inject(DetailFragment fragment);
    }
    

    Parent -> Child injection is not working in Dagger 2. It was covered here, here and this SO question.

    0 讨论(0)
提交回复
热议问题