简单了解MVP

2017-07-03  本文已影响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下载

上一篇 下一篇

猜你喜欢

热点阅读