MVP 庫

package com.example.mvp;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.mvp.mvp.BaseModel;
import com.example.mvp.mvp.BasePresenter;
import com.example.mvp.mvp.IBaseView;

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView {
    public P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(bindLayoutId());
        initView();
        presenter=initPresenter();
        if(presenter!=null){
            presenter.attch(initModel(),this);
        }
    }

    /**
     * 初始化子類Model
     * @return
     */
    protected abstract BaseModel initModel();

    /**
     * 讓子類初始化p
     * @return
     */
    protected abstract P initPresenter();

    /**
     * 初始化view
     */
    protected abstract void initView();

    /**
     * 綁定資源
     * @return
     */
    protected abstract int bindLayoutId();

    /**
     * 連接失敗
     * @param msg
     */
    public void serverFail(String msg){

    }
    public void showLoading(){

    }
    public void hideLoading(){

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(presenter!=null){
            presenter.detach();
        }
    }
}

public abstract class BaseFragment<P extends BasePresenter> extends Fragment implements IBaseView{
    public P presenter;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(bindLayoutId(),container,false);
        initView(view);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        presenter=initPresenter();
        if(presenter!=null){
            Log.e("BaseFragment","presenter");
            presenter.attch(initModel(),this);
        }
        initData();
    }

    protected abstract void initData();


    /**
     * 初始化子類model
     * @return
     */
    protected abstract BaseModel initModel();

    /**
     * 讓子類出示化P
     * @return
     */
    protected abstract P initPresenter();

    /**
     * 初始化控件
     * @param view
     */
    protected abstract void initView(View view);

    /**
     * 綁定資源
     * @return
     */
    protected abstract int bindLayoutId();

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(presenter!=null){
            presenter.detach();
        }
    }

}

public class BaseModel implements IBaseModel{

    @Override
    public void serverFail(String msg) {

    }
}

public class BasePresenter<M extends BaseModel,V extends IBaseView> implements IBasePresenter {
    public M model;
    public V view;

    /**
     * 綁定view和model
     * @param m
     * @param v
     */
    public void attch(M m,V v){
        this.model=m;
        this.view=v;
    }

    /**
     * 回收資源,解綁,避免內存泄漏
     */
    public void detach(){
        this.model=null;
        this.view=null;
    }
}

public interface IBaseModel {
    void serverFail(String msg);
}
public interface IBasePresenter {
}
public interface IBaseView {
    void showLoading();
    void hideLoading();
    void serverFail(String msg);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章