Android MVP 框架 Demo

这个项目简单封装了一个MVP设计框架,根据框架可以很容易的在你自己的项目中实现 MVP 设计模式。
也许你知道 所谓的MVP 设计模式就是:

M就是Model ,这里主要负责的就是业务处理,数据的获取,例如数据库的读写,http的网络数据的处理。V就是View ,顾名思义视图的意思,这里主要的任务就是处理各个界面ui控件的处理。P就是Presenter ,控制器,这里负责的是Model与View之间的联系操作。

其实简单的用一句话描述就是:将View成抽象成view接口,将业务逻辑统统交给Presenter 去做。

也许还不太了解或是已经了解的可以来看下面的 demo

下面的一个 activity 需要完成的功能是

(1)显示初始化数据 list data
(2)下拉刷新能加载新数据
(3)数据加载成功,或出错做一些提示交互。

其实这些基本内容是我们经常和大量用到的一些场景。那来看看咱们怎么利用mvp模式来分层实现:

public class MainActivity extends BaseSwipeRefreshActivity implements IRefreshView {    @Bind(R.id.toolbar)    protected Toolbar mToolbar;    @Bind(R.id.swipe_refresh_layout)    protected SwipeRefreshLayout mSwipeRefreshLayout;    @Bind(R.id.main_RecyclerView)    RecyclerView main_RecyclerView;    private DataAdapter mMianActivityAdapter;    private List adapterList = new ArrayList();    @Override    protected Toolbar getToolbar() {        return mToolbar;    }    @Override    protected SwipeRefreshLayout getSwipeRefreshLayout() {        return mSwipeRefreshLayout;    }    @Override    protected int getLayout() {        return R.layout.activity_main;    }    @Override    protected void initPresenter() {        mPresenter = new MainPresenter(this, this);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initRecycleView();    }    /      * 初始化请求数据     */    @Override    protected void intiData() {        // 初始化数据        mPresenter.initData();        // 可刷新状态准备好了        mPrepareRefresh = true;    }    /      * 刷新请求数据     */    @Override    protected void onRefreshStarted() {        mPresenter.addMoreData();    }    @Override    public void showEmptyView() {        SnackbarUtil.PrimarySnackbar(mContext,mToolbar,"请求数据为空");    }    @Override    public void showErrorView(Throwable throwable) {        SnackbarUtil.PrimarySnackbar(mContext,mToolbar,"请求数据出错");    }    @Override    public void hasNoMoreData() {        SnackbarUtil.PrimarySnackbar(mContext,mToolbar,"无更多数据");    }    /      * 初始化填充数据     * @param mData     */    @Override    public void fillData(List mData) {        mMianActivityAdapter.insertedAllItem(mData);    }    /      * 加载更多数据     * @param mData     */    @Override    public void appendMoreDataToView(List mData) {        mMianActivityAdapter.appendMoreItem(mData);    }    @Override    protected int getMenuRes() {        return R.menu.mian_menu;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        int id = item.getItemId();        switch (id){            case R.id.menu_1:                SnackbarUtil.PrimarySnackbar(mContext,mToolbar,"FragmentActivity");                Intent intent = new Intent(MainActivity.this,FragmentActivity.class);                startActivity(intent);                break;        }        return super.onOptionsItemSelected(item);    }    private void initRecycleView() {        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);        main_RecyclerView.setLayoutManager(layoutManager);        mMianActivityAdapter = new DataAdapter(mContext,adapterList);        main_RecyclerView.setAdapter(mMianActivityAdapter);    }}

代码看的有点多,不过相对那种把什么功能都放在 activity 来讲已经很少了,而且看上面代码结构清晰,功能明确,职责分明,耦合度低,很适合扩展。 ^-^ ///

其实上面的 activity 主要负责
(1) view 的 一些初始化,如:

@Bind(R.id.toolbar)    protected Toolbar mToolbar;    @Bind(R.id.swipe_refresh_layout)    protected SwipeRefreshLayout mSwipeRefreshLayout;    @Bind(R.id.main_RecyclerView)    RecyclerView main_RecyclerView;
   private void initRecycleView() {        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);        main_RecyclerView.setLayoutManager(layoutManager);        mMianActivityAdapter = new DataAdapter(mContext,adapterList);        main_RecyclerView.setAdapter(mMianActivityAdapter);    }

(2)view 的一些更新,如:

 @Override    public void showEmptyView() {        SnackbarUtil.PrimarySnackbar(mContext,mToolbar,"请求数据为空");    }
 /      * 初始化填充数据     * @param mData     */    @Override    public void fillData(List mData) {        mMianActivityAdapter.insertedAllItem(mData);    }

而数据的请求部分只有单单两句:

 mPresenter.initData(); mPresenter.addMoreData();

那么再来看一眼 什么是 MVP 设计模式:

M就是Model ,这里主要负责的就是业务处理,数据的获取,例如数据库的读写,http的网络数据的处理。V就是View ,顾名思义视图的意思,这里主要的任务就是处理各个界面ui控件的处理。P就是Presenter ,控制器,这里负责的是Model与View之间的联系操作。

咱们的 activity 就是 mvp 中的 v 层 ,而且职责明确,只负责 ui 处理的 部分。

其他都交给了 Presenter 去做, 那咱们接下来再来分析分析 Presenter 是怎么做到 操作
model 和 view 之间的联系的。

先看 activity 有继承 IRefreshView 这个接口

public class MainActivity extends BaseSwipeRefreshActivity implements IRefreshView {}

关键字:java, android, MVP


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部