android:MVP模式学习

本文介绍了Android开发中的MVP模式,通过一个简单的日期显示demo阐述了Model、View和Presenter的角色分工。Model负责获取数据,IModel接口定义相关方法;View(通过IView接口)描述页面布局和交互;Presenter作为协调者,连接Model和View,实现业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考源码:https://github.com/antoniolg/androidmvp

MVP,分别代表Model,View,Presenter
使用MVP模式要创建很多接口,目的是解耦。下面是展示了一个很简单的demo,点击TextView,显示当前日期

Model:
在IModel接口里定义了获取数据的方法,Model继承该接口,主要实现获取数据的方法

public interface IModel {

    void getData(ICallBack iCallBack);

    interface ICallBack {
        void onResult(String data);
    }
}
public class Model implements IModel {

    @Override
    public void getData(final ICallBack iCallBack) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                iCallBack.onResult(new Date().toLocaleString());
            }
        }, 2000);
    }
}

View:
IView接口中说明了页面布局的所有可能显示场景

public interface IView {
    void showProgress();

    void setData(String data);

    void hideProgress();
}

Presenter:
是Model和View的协调者

public interface IPresenter {
    void performOnClick();
}
public class Presenter implements IPresenter {
    private IView iTextClickView;
    private IModel iModel;

    public Presenter(IView iTextClickView){
        this.iTextClickView = iTextClickView;
        iModel = new Model();
    }

    @Override
    public void performOnClick() {
      if (iTextClickView!=null){
          iTextClickView.showProgress();
          iModel.getData(new IModel.ICallBack() {
              @Override
              public void onResult(String data) {

                            String dataBack = "获取到的数据是:"+data;
                  iTextClickView.setData(dataBack);
                  iTextClickView.hideProgress();
              }
          });
      }
    }
}

Activity:
实现IView接口,具体实现页面不同状态下执行的操作。同时也要初始化Presenter,因为逻辑都在Presenter中呢

public class ClickTextActy extends Activity implements IView {

    private TextView mTextView;
    private IPresenter iPresenter;
    private ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acty_text_click);
        //构建Presenter
        iPresenter = new Presenter(this);

        progressBar = (ProgressBar) findViewById(R.id.progress);
        mTextView = (TextView) findViewById(R.id.mtext);
        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iPresenter.performOnClick();
            }
        });
    }

    @Override
    public void showProgress() {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgress() {
        progressBar.setVisibility(View.GONE);
    }

    @Override
    public void setData(String data) {
        mTextView.setText(data);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值