Dagger2在Mvp的應用

  • 2020 年 2 月 12 日
  • 筆記

介紹http://www.jianshu.com/p/39d1df6c877d

大致實現步驟如下

PresenterComponent類

@Singleton  @Component(modules = {PresenterModule.class})  public interface PresenterComponent {        /**       * 注入點       * @param activity  表示需要使用DaggerPresenterComponent.create().inject(this);注入的地方,       *                  注意,此處一定不要使用Activity,需要使用MainActivity,否則的話會報空指針異常。       *                  因為這裡的注入點是什麼,就會到該類裡面去找。如果寫Activity,就會到Activity裡面去找,       *                  而Activity中並沒有@inject,即沒有需要注入的地方,所以在生成的DaggerPresenterComponent       *                  中,方法就不會被調用。       */        void inject( MainActivity activity);  }

PresenterModule類

    DownloadQuanCryPre downloadQuanCryPre;      DownloadQuanDataPre downloadQuanDataPre;      public PresenterModule(MainActivity activity) {          downloadQuanCryPre =new DownloadQuanCryPre(activity,activity);          downloadQuanDataPre =new DownloadQuanDataPre(activity,activity);      }    }

在Activity

    @Inject      public DownloadQuanCryPre downloadQuanCryPre;      @Inject      public DownloadQuanDataPre downloadQuanDataPre;  //oncreate()方法中  DaggerPresenterComponent.builder().presenterModule(new PresenterModule(this)).build().inject(this);

BasePresenter(註:BasePresenter<IRequestCollectView,BaseActivity> 可以引入BaseActivity,這樣可以在多個Activity中復用)

public class BasePresenter<V, T> implements LifeCycleListener {        protected Reference<V> mViewRef;      protected V mView;      protected Reference<T> mActivityRef;      protected T mActivity;          public BasePresenter(V view, T activity) {          attachView(view);          attachActivity(activity);          setListener(activity);      }        /**       * 設置生命周期監聽       *       * @author ZhongDaFeng       */      private void setListener(T activity) {          if (getActivity() != null) {              if (activity instanceof BaseActivity) {                  ((BaseActivity) getActivity()).setOnLifeCycleListener(this);              } else if (activity instanceof BaseFragmentActivity) {                  ((BaseFragmentActivity) getActivity()).setOnLifeCycleListener(this);              }          }      }        /**       * 關聯       *       * @param view       */      private void attachView(V view) {          mViewRef = new WeakReference<V>(view);          mView = mViewRef.get();      }        /**       * 關聯       *       * @param activity       */      private void attachActivity(T activity) {          mActivityRef = new WeakReference<T>(activity);          mActivity = mActivityRef.get();      }        /**       * 銷毀       */      private void detachView() {          if (isViewAttached()) {              mViewRef.clear();              mViewRef = null;          }      }        /**       * 銷毀       */      private void detachActivity() {          if (isActivityAttached()) {              mActivityRef.clear();              mActivityRef = null;          }      }        /**       * 獲取       *       * @return       */      public V getView() {          if (mViewRef == null) {              return null;          }          return mViewRef.get();      }        /**       * 獲取       *       * @return       */      public T getActivity() {          if (mActivityRef == null) {              return null;          }          return mActivityRef.get();      }        /**       * 是否已經關聯       *       * @return       */      public boolean isViewAttached() {          return mViewRef != null && mViewRef.get() != null;      }        /**       * 是否已經關聯       *       * @return       */      public boolean isActivityAttached() {          return mActivityRef != null && mActivityRef.get() != null;      }        @Override      public void onCreate(Bundle savedInstanceState) {        }        @Override      public void onStart() {        }        @Override      public void onRestart() {        }        @Override      public void onResume() {        }        @Override      public void onPause() {        }        @Override      public void onStop() {        }        @Override      public void onDestroy() {          detachView();          detachActivity();      }  }
//presenter 繼承上面的BasePresenter   if (getView() != null&&getActivity()!=null){         if(!quanCryBean.isError())                  getView().loadCry(quanCryBean.getQuan_category());             else                  getView().loadCryFail(quanCryBean.getError_msg());  }