1:先导入jar包
2:创建以Contract结尾的Class类,自动生成一些类
3:在BasePresenter类中
class BasePresenter<Model, View> {
public Context context;
public Model mModle;
public View mView;
public void setMV(Model m,View v){
this.mModle=m;
this.mView=v;
}
}
4:创建TUtils
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* Created by Administrator on 2018/5/28 0028.
*/
public class TUtils {
private static Type superclass;
//通过泛型的反射形式获取传入类的对象,然后return出去
public static <T>T getT(Object o, int i){
superclass = o.getClass().getGenericSuperclass();
try {
return ((Class<T>)(((ParameterizedType)superclass).getActualTypeArguments()[i])).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
5:创建BaseActivity:
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
public abstract class BaseActivity <T extends BasePresenter,E extends BaseModel> extends Activity {
public T mPresenter;
public E mModel;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init() {
//setContentview我们不再是使用之前哪种R。layout方法了 而是使用一个方法来返回一个id
setContentView(getLayoutId());
mPresenter= TUtils.getT(this,0);
mModel=TUtils.getT(this,1);
if (this instanceof BaseView) {
mPresenter.setMV(mModel,this);
}
//初始化view 同样适用抽象的
initView();
}
protected abstract void initView();
public abstract int getLayoutId() ;
}
Main主页面 :
class MainActivity extends BaseActivity<LoginPresenter, LoginModel>
关联布局
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
调用方法
@Override
protected void initView() {
mPresenter.login();
}