项目使用的是T-MVP模式开发,针对Base(Activity和Fragment)泛型封装查阅的资料。
https://blog.csdn.net/z2wenfa/article/details/52873009
核心问题:怎么将Model与View实例化并且注入Presenter的呢?
1、通过一个泛型实例化工具类,我们可以传入一个对象通过这个对象与泛型所在位置实例化出一个泛型的对象。
2、在base中的代码如下,简写:
public abstract class BaseActivity<T extends BasePresenter, E extends BaseModel> extends
AppCompatActivity {
public T mPresenter;
public E mModel;
public Context mContext;
public RxManager mRxManager;
private boolean isConfigChange = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isConfigChange = false;
mRxManager = new RxManager();
doBeforeSetcontentView();
setContentView(getLayoutId());
ButterKnife.bind(this);
mContext = this;
mPresenter = TUtil.getT(this, 0);
mModel = TUtil.getT(this, 1);
if (mPresenter != null) {
mPresenter.mContext = this;
}
this.initPresenter();
this.initView();
}
}
3、通过BasePresenter代码,我们可以看到有两个泛型和一个set方法,通过set方法把view和modle传入presenter内。调用Presenter的setVM方传入View与Model。此时我们边能够再Activity中通过mPresenter调用Presenter,在Presenter中通过mView与mModel分别调用View与Model了。
public abstract class BasePresenter<M, T> {
public Context context;
public M mModel;
public T mView;
public RxManager mRxManager = new RxManager();
public void setVM(T v, M m) {
this.mView = v;
this.mModel = m;
this.onStart();
}
public abstract void onStart();
public void onDestroy() {
mRxManager.clear();
}
}
网友评论