正式入坑博客圈(MVP模式浅析)

今天开通了博客,准备开始一段不归之路,想了下该写点什么,前段时间亲身尝试了下MVP+Dagger依赖注入感觉还不错,就简单分享下MVP模式吧,如果说的有问题,希望大神指正。

结构

首先说一下MVP模式,拆开理解就是Model,View,Presenter。Model层处理本地信息存储逻辑处理,View层显示视图,Presenter层用于网络请求等逻辑处理。

具体使用

新建两个文件夹,contract,presenter。contract文件夹下存放每个activity对应M,V,P层要实现的接口,接口具体由自己定义,activity实现view接口,presenter类实现presenter接口,model类实现model接口,废话不多说,直接上代码,具体如下:
public class MainActivityContract {
    public interface MainActivityView extends BaseView {
        void showNotification(List<String> notificationList);
        void showHeaderLine(List<HeadLineBean.DataBean> headerLineList);
    }

    public interface MainActivityPresenter {
        void getNotificationList();
        void getHeaderLineList();
    }

    public interface MainActivityModel {
    }
}
public class MainActivityPresenterImpl extends SimplePresenter<MainActivityContract.MainActivityView> implements MainActivityContract.MainActivityPresenter{
    private Context mContext;
    private List<String> mNotificationList;
    private List<HeadLineBean.DataBean> mHeaderLineList;
    public MainActivityPresenterImpl(Context context) {
        this.mContext = context;
    }
    @Override
    public void getNotificationList() {
        mNotificationList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            mNotificationList.add("今日成都出现雾霭天气,导致多处道路不通"+i);
        }
        mView.showNotification(mNotificationList);

    }

    @Override
    public void getHeaderLineList() {
        mHeaderLineList = new ArrayList<>();

        NetApi.getInstance().getHeadLine().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new BaseSubscriber<HeadLineBean>(CustomApp.getInstance()) {
                    @Override
                    public void onCompleted() {
                        super.onCompleted();
                    }

                    @Override
                    public void onError(Throwable e) {
                        super.onError(e);
                    }
                    @Override
                    public void onNext(HeadLineBean headLineBean) {
                        super.onNext(headLineBean);
                        if(headLineBean.getCode() == 200){

                            mHeaderLineList.addAll(headLineBean.getData());
                            mView.showHeaderLine(mHeaderLineList);
                        }
                    }
                });

    }
}
public class SimplePresenter<T extends BaseView> implements BasePresenter<T> {
    protected T mView;
    protected String TAG = this.getClass().getSimpleName();
    protected Context mContext;

    @Override
    public void attachView(T view) {
        mView = view;
    }

    @Override
    public void detachView() {
        this.mView = null;
    }
}
public class MainActivity extends BaseActivity implements View.OnClickListener,
        MainActivityContract.MainActivityView {

    
@Inject
MainActivityPresenterImpl mPresenter;
@Override protected int getContentId() { return R.layout.activity_main; } @Override protected void initInject() { super.initInject(); DaggerActivityComponent.builder().activityModule(new ActivityModule(this)).build().inject(this); if (mPresenter != null) { mPresenter.attachView(this); }
}
@Override
protected void init(Bundle savedInstanceState) {
    super.init(savedInstanceState);
mPresenter.getNotificationList();
mPresenter.getHeaderLineList();
 }
@Override
public void showHeaderLine(List<HeadLineBean.DataBean> headerLineList) {
    mHeaderLineList.addAll(headerLineList);
    mHeadLineAdapter.setNewData(mHeaderLineList);
    startHeadeLineTimer();
}
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mPresenter != null) {
        mPresenter.detachView();
    }
}
Dagger依赖注入就不说了,因为自己也了解得不够深入,以免误人子弟,哈哈。第一次使用博客的编辑器有点不习惯,编辑的有点丑,不过孰能生巧,相信下次会好很多。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值