android小白进阶MVP模式开发(三步曲),让你全面理解MVP进阶(二)

来源:互联网 发布:kali linux配置ip地址 编辑:程序博客网 时间:2024/05/16 04:20
上一篇 我已经讲过mvc mvp 以及对比,写的有点累了,但你们就是我的红牛,我的体质能量,我的加多宝,要是女的的话也是可以是我的女朋友,但请你记住,我从不搞基,从不...

Follow Me:

如果仔细看完我上一篇文章的,特别注意下我用“#########” 来区别上一篇剥离出去的Modle

Start:代码来了

I(桥梁):

package com.example.bandofbrotherszts.ztsmvpdemostep1.cantract;/** * Created by BandOfBrothersZTS on 2017/8/22. */public interface LoginInterface {    /**  #################     * 为桥梁添加Model */    interface Model{        String getData();    }    /**     * 接口View  “即Activity(Fragment)的所实现类“     */    interface View{        //setData方法是为了  Activity实现View接口之后 重载这个方法就可以直接拿到str 给TextView赋值       void setData(String str);    };    /**     * 接口Presenter 是LoginPresenter的所实现类     */    interface Presenter{        //我们所要做的就是 给一个TextView 赋值,所以Presenter 中需要有一个方法loadData()        // 调用 model的网络请求        void loadData();    };    /**     * 温馨提示 :你也可以吧interface Presenter{} 抽象接口换成 abstract class Presenter{}     * 这样的话Presenter 是LoginPresenter的父类   LoginPresenter extends Presenter 即可     * 但是本着“单继承,多实现的原则” 我还是喜欢实现  因为你可能还有别的基类对不对     */    //TODO  不要问我mvp模式   m层在哪   不要忘了咱们第一步曲 是把m层剥离出去了    //TODO   但是这并不影响, 因为Model 是通过Presenter来调用的  看看mvc和mvp的对比图就明白了    //TODO   所以第一步曲的特点在于: 通过Presenter 来直接调用静态类 进行异步请求}

P:

package com.example.bandofbrotherszts.ztsmvpdemostep1.presenter;import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;import com.example.bandofbrotherszts.ztsmvpdemostep1.model.LoginModel;/** *Created by BandOfBrothersZTS on 2017/8/22. */public class LoginPresenter implements LoginInterface.Presenter{    /**     *View  和   Presenter 是互通的  所以我要通过构造的方式拿到View     * 拿到View   Presenter就可以调用View中的方法了     * 嘿嘿,我又污了(拿到房卡  我就可以对里面姑娘为所欲为了!!!)     */private LoginInterface.View view;    /**###########  Presenter 传递信息给Model  所以要拿到它的实例     * 我直接在presenter 中实例化的  你也可以在Activity实例化,然后通过构造传过来     */    private LoginInterface.Model model;    public LoginPresenter(LoginInterface.View view) {        this.view = view;        this.model = new LoginModel();    }    /**###########  通过Model 拿到数据     * 然后通知view层     */    @Override    public void loadData() {        String str = model.getData();        view.setData(str);    }}

M:
package com.example.bandofbrotherszts.ztsmvpdemostep1.model;import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;/** * Created by BandOfBrothersZTS on 2017/8/22. * #############getData()不是静态调用了,是重写方法了 */public class LoginModel implements LoginInterface.Model{    /**     * 很简单就是网络强求数据,我比较懒所以我伪造一下数据     */    public String getData(){        return "我是伪造的网络请求数据";    };}

V:

package com.example.bandofbrotherszts.ztsmvpdemostep1.activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import com.example.bandofbrotherszts.ztsmvpdemostep1.R;import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;import com.example.bandofbrotherszts.ztsmvpdemostep1.presenter.LoginPresenter;/** * Created by BandOfBrothersZTS on 2017/8/22. */public class LoginActivity extends AppCompatActivity implements LoginInterface.View {    private LoginInterface.Presenter mPresenter;    private TextView dataTv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        initView();        /**         * 注意了::::::::::::         * 向下转型 实例化LoginPresenter         * 为什么这么写?  因为LoginInterface才是桥梁!!!         */        mPresenter = new LoginPresenter(this);    }    private void initView() {        dataTv = (TextView) findViewById(R.id.data_tv);        dataTv.setOnClickListener(new View.OnClickListener() {//点击请求数据            @Override            public void onClick(View v) {                mPresenter.loadData();            }        });    }    @Override    public void setData(String str) {        dataTv.setText(str);    }}

END:

总结: 每个人都有自己的mvp,你的参阅让我倍感荣幸,希望你也能找到自己的mvp,如需帮助,或有志同道合者想一起进步的,加qq群:659014357

最后我附上github源码连接 :MVP(二)源码                                   



               

原创粉丝点击