Skip to content

Feature Mvp

D edited this page Mar 17, 2018 · 1 revision

Prepare

    1).MModel
    2).MAdapter
    3).MFragmentActivityMFragmentMPresenterIMView

1.MModel

public class MModel {
    public int index;
    public String content;
}

2.MAdapter

public class MAdapter extends CommonAdapter<MModel> {

    public MAdapter(Context context, List<MModel> datas, int layoutId) {
        super(context, datas, layoutId);
    }

    @Override
    public void convert(int position, CommonHolder holder, MModel item) {

    }
}

3.IMView

public interface IMView extends MvpView {
    void setData();
}

4.MPresenter

public class MPresenter extends MvpBasePresenter<IMView> {

    public MPresenter(Context context) {
        super(context);
    }

    /**
     * 网络请求 例子
     */
    public void getData() {
        //step 7-6: Presenter逻辑: 网络请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                //do some thing e.g network requests...
                if (getView() == null) {
                    //activity 生命周期结束,不可回调回此activity,可执行非此activity操作
                    return;
                }
                //activity 生命周期内
                getView().setData();
            }
        }).start();
    }
}

5.MFragment

public class MFragment extends BaseFragment<MPresenter> implements IMView {

    @Override
    protected int getLayoutRes() {
        //step 7-1: Xml布局
        return 0;
    }

    @Override
    public MPresenter getPresenter() {
        //step 7-2: new Presenter实例,Context必须ApplicationContext,避免内存泄漏
        return new MPresenter(getActivity().getApplicationContext());
    }

    @Override
    protected MvpView getMvpView() {
        //step 7-3: 返回View给Presenter持有,this即本身
        return this;
    }

    @Override
    protected void bindView(View rootView) {
        super.bindView(rootView);
        //step 7-4: 通过ViewHelper.findView(...)、ViewHelper.setOnClick(...),绑定成员View变量及点击事件
    }

    @Override
    protected void init() {
        //step 7-5: View已绑定,初始化操作...这里的逻辑在onCreate的最后执行
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //step 7-5: Presenter已绑定View,可以调用Presenter逻辑
        mPresenter.getData();
    }

    @Override
    public void setData() {
        //step 7-7: 处理返回的数据
    }
}

6.MFragmentActivity

public class MFragmentActivity extends BaseFragmentActivity {
    @Override
    protected int getLayoutRes() {
        //step 3-1: Xml布局
        return 0;
    }

    @Override
    protected void bindView() {
        super.bindView();
        //step 3-2: 通过@BindView/ViewHelper.findView(...)、ViewHelper.setOnClick(...),绑定成员View变量及点击事件
    }

    @Override
    protected void init() {
        //step 3-3: 初始化操作...这里的逻辑在onCreate的最后执行
        MFragment fragment = new MFragment();
        getSupportFragmentManager().beginTransaction().replace(0, fragment).commitAllowingStateLoss();
    }
}
Clone this wiki locally