MVP核心思想:mvp把视图层中UI逻辑抽象成View接口 把业务逻辑抽象成Presenter Model还是原来的Model。
实例使用弱引用来防止内存泄漏。
Model类
public class GirlModelImlV1 implements IGirlModel {
Handler handler=new Handler(Looper.getMainLooper());
@Override
public void loadGirl(final GirlOnLoadlitener girlOnLoadlitener) {
new Thread()
{
@Override
public void run() {
try {
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
final List<Girl> data = new ArrayList<Girl>();
data.add();
handler.post(new Runnable() {
@Override
public void run() {
//回调
girlOnLoadlitener.onComplete(data);
}
});
}
}.start();
}
}
/**
* 监听数据返回
*/
public interface IGirlModel {
void loadGirl(GirlOnLoadlitener girlOnLoadlitener);
interface GirlOnLoadlitener
{
void onComplete(List<Girl> girls);
}
}
Present类
/**
* T 对应着Activity 的UI抽象接口 视图
*/
public abstract class BasePersenter<T> {
/**
* 持有UI接口的弱引用
*/
protected WeakReference<T> mViewRef;
/**
* 获取数据方法
*/
public abstract void fectch();
public void attachView(T view) {
mViewRef = new WeakReference<T>(view);
}
/**
* 解绑
*/
public void detach()
{
if(mViewRef!=null)
{
mViewRef.clear();
mViewRef=null;
}
}
}
public class GirlPresentV1<T> extends BasePersenter<IGrilView> {
/**
* 持有视图层 UI接口的引用 此时的视图层Activity
*/
IGrilView mGrilView;
public GirlPresentV1(IGrilView mGrilView) {
this.mGrilView = mGrilView;
}
/**
* 持有模型Model的引用
*/
IGirlModel girlModel=new GirlModelImlV1();
@Override
public void fectch()
{
mGrilView.showLoading();
if(girlModel!=null)
{
/**
* 参数为数据回调监听
*/
girlModel.loadGirl(new IGirlModel.GirlOnLoadlitener() {
@Override
public void onComplete(List<Girl> girls) {
//回调视图层
mGrilView.showGrils(girls);
}
});
}
}
}
View类
public interface IGrilView {
/**
* UI业务逻辑 加载进度条
*/
void showLoading();
void showGrils(List<Girl> grils);
}
/**
* V IGrilView接口
*/
public abstract class BaseActivty<V,T extends BasePersenter<V>> extends Activity {
protected T mPresent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresent=createPresent();
mPresent.attachView((V) this);
}
@Override
protected void onDestroy() {
mPresent.detach();
super.onDestroy();
}
/**
* 子类实现具体的构建过程
* @return
*/
protected abstract T createPresent() ;
}
/**
* 属于视图层
* View
*/
public class MainActivity extends BaseActivty<IGrilView,GirlPresentV1<IGrilView>> implements IGrilView{
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_v1);
listView= (ListView) findViewById(R.id.listview);
mPresent.fectch();
}
@Override
public void showLoading() {
Toast.makeText(this,"正在拼命加载",Toast.LENGTH_SHORT).show();
}
@Override
public void showGrils(List<Girl> grils) {
listView.setAdapter(new GirlListAdapter(this,grils));
}
@Override
protected GirlPresentV1<IGrilView> createPresent() {
return new GirlPresentV1<>(this);
}
}