美文网首页
简单了解MVP

简单了解MVP

作者: 弃用简书 | 来源:发表于2017-07-03 22:42 被阅读0次

当下Android开发使用MVP,MVVM使用的非常多,很多网站博客论坛都通过图文详细讲解了各种优缺点。然而感觉图画的再好感觉没有卵用。还是看代码来的直接。
然而发现各家代码写的有些不同,有好几个模板,其实大体都是相同的。都知道Google出了自己家的目标。
这里就简单记录下google家的模板代码写的一个界面。

效果图

最平淡无奇的登录界面。很多文章都有。

这里写图片描述

代码

代码结构

这里写图片描述

废话不多说,直接上代码吧。个人感觉文章写的再牛,都不如看过代码自己体验的好。所以只贴代码,不多说。

MainActivity.java就是一个容器

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.fl_content)
    FrameLayout flContent;
    private MainPresenter mainPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        MainFragment mainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(R.id.fl_content);
        if (mainFragment == null) {
            mainFragment = MainFragment.newInstance();
            ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), mainFragment, R.id.fl_content);
        }
        mainPresenter = new MainPresenter(this,mainFragment);
        mainFragment.setPresenter(mainPresenter);

    }
}

MainFragment.java处理view

public class MainFragment extends Fragment implements MainContract.View {
    @BindView(R.id.tiet_user_name)
    TextInputEditText tietUserName;
    @BindView(R.id.tiet_password)
    TextInputEditText tietPassword;
    @BindView(R.id.btn_login)
    Button btnLogin;
    @BindView(R.id.pb_progress_bar)
    ProgressBar pbProgressBar;
    Unbinder unbinder;
    private MainContract.Presenter mPresenter;

    public static MainFragment newInstance() {
        MainFragment fragment = new MainFragment();
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPresenter = new MainPresenter(getActivity(), this);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        unbinder = ButterKnife.bind(this, view);
        return view;
    }

    @OnClick(R.id.btn_login)
    public void login() {
        showProgressBar();
        mPresenter.login();
    }

    @Override
    public void onDestroyView() {

        super.onDestroyView();
        unbinder.unbind();
    }

    @Override
    public void showProgressBar() {
        pbProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgressBar() {
        pbProgressBar.setVisibility(View.GONE);

    }

    @Override
    public String getUserName() {
        return tietUserName.getText().toString().trim();
    }

    @Override
    public String getPassword() {
        return tietPassword.getText().toString().trim();
    }

    @Override
    public void setPresenter(MainContract.Presenter presenter) {
        mPresenter = presenter;
    }
}

MainContract .java定义接口通过接口来处理view,presenter

public interface MainContract {
    interface View extends BaseView<Presenter> {
        void showProgressBar();

        void hideProgressBar();

        String getUserName();


        String getPassword();

    }

    interface Presenter extends BasePresenter {
        void login();
    }
}

MainPresenter .java处理逻辑

public class MainPresenter implements MainContract.Presenter {
    private Context context;
    private MainContract.View mView;

    public MainPresenter(Context context, MainContract.View view) {

        this.context = context;
        mView = view;
    }

    @Override
    public void login() {

        if ("user".equals(mView.getUserName()) && "123".equals(mView.getPassword())) {
            ToastUtils.showToast(context, "Login Successfully!");
            mView.hideProgressBar();
        } else {
            ToastUtils.showToast(context, "Sorry,you failed!");
            mView.hideProgressBar();
        }
    }
}

Demo下载

相关文章

  • 简单了解MVP

    当下Android开发使用MVP,MVVM使用的非常多,很多网站博客论坛都通过图文详细讲解了各种优缺点。然而感觉图...

  • (MVP+RxJava+Retrofit)解耦+Mockito

    前言 首先,对于MVP、RxJava还不了解的同学,请先阅读这几篇文章: Android MVP模式 简单易懂的介...

  • 玩转MVP模式 - 基础篇

    今天为大家介绍MVP设计模式,希望能用最简单的代码带大家了解MVP设计模式。在本篇文章中,我们只是简单的模拟网络请...

  • Android MVP框架

    1、简单实用的MVP框架 2、从最简单的MVP讲起

  • Android MVP从入门到放弃(二)

    上章写了一个简单的MVP,了解了MVP的 基本方式。但是存在很多问题,比如如果正在网络请求时、页面被关闭,p层还为...

  • Android MVP进阶

    上一篇:Android MVP初探 上一篇文章讲了最简单的一个Android MVP,这个只是用来让初学者了解MV...

  • 我自己对于mvp模式的理解

    这里仅仅记录自己对于mvp模式的理解 mvp是从mvc演化而来的,想了解mvp就先必须了解mvc mvc是什么, ...

  • 浅谈Mvp

    简单谈谈mvp

  • 一文带你了解 ViewModel 的使用及源码解析

    前言 学习ViewModel之前首先我们得简单了解下MVP和MVVM,因为ViewModel是MVVM中的一个元素...

  • 十分钟看懂android的MVP。

    看懂MVP很简单,只要 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。...

网友评论

      本文标题:简单了解MVP

      本文链接:https://www.haomeiwen.com/subject/hbazcxtx.html