Android 简单的MVP实例

来源:互联网 发布:新东方网络视频哪里买 编辑:程序博客网 时间:2024/04/19 17:55

版权声明:本文为博主原创文章,未经博主允许不得转载

实现一个简单的mvp demo,实现view与model的解耦,采用presenter将view与model绑定在一起,完成View跟Model间的交互,好了,废话不多说了,直接看代码:

新建一个module,展示图片的一个简单demo。
demo机构图(看到图片相信大家能够清晰地理解):
这里写图片描述

TestBean代码:

package com.example.simplemvp.beans;/** * Created by feng on 2017/3/13. */public class TestBean{    private String msg;    private int icon;    public TestBean(String msg, int icon)    {        this.msg = msg;        this.icon = icon;    }    public String getMsg()    {        return msg;    }    public void setMsg(String msg)    {        this.msg = msg;    }    public int getIcon()    {        return icon;    }    public void setIcon(int icon)    {        this.icon = icon;    }}

加载数据的model接口:

package com.example.simplemvp.model;import com.example.simplemvp.beans.TestBean;import java.util.List;/** * Created by feng on 2017/3/13. */public interface ITestBeanModel{    //加载数据    void loadTestBeans(TestOnLoadListener listener);    //加载数据的接口    interface TestOnLoadListener    {        void onCompelete(List<TestBean> grils);    }}

model接口的实现类:

package com.example.simplemvp.model;import com.example.simplemvp.R;import com.example.simplemvp.beans.TestBean;import java.util.ArrayList;import java.util.List;/** * Created by feng on 2017/3/13. */public class ITestBeanModelImpv implements ITestBeanModel{    @Override    public void loadTestBeans(TestOnLoadListener listener)    {        List<TestBean> datas = new ArrayList<TestBean>(  );        datas.add(new TestBean( "我是图一", R.mipmap.th_01));        datas.add(new TestBean( "我是图二", R.mipmap.th_02));        datas.add(new TestBean( "我是图三", R.mipmap.th_03));        datas.add(new TestBean( "我是图四", R.mipmap.th_04));        datas.add(new TestBean( "我是图五", R.mipmap.th_05));        datas.add(new TestBean( "我是图六", R.mipmap.th_06));        datas.add(new TestBean( "我是图七", R.mipmap.th_07));        datas.add(new TestBean( "我是图八", R.mipmap.th_08));        datas.add(new TestBean( "我是图九", R.mipmap.th_09));        datas.add(new TestBean( "我是图十", R.mipmap.th_10));        datas.add(new TestBean( "我是图十一", R.mipmap.th_11));        datas.add(new TestBean( "我是图十二", R.mipmap.th_12));        listener.onCompelete( datas );    }}

View的展示接口:

package com.example.simplemvp.view;import com.example.simplemvp.beans.TestBean;import java.util.List;/** * Created by feng on 2017/3/13. */public interface ITestBeanView{    //显示数据    void showGrils(List<TestBean> tests);}

Model与View的交互类Presenter:

package com.example.simplemvp.presenter;import com.example.simplemvp.beans.TestBean;import com.example.simplemvp.model.ITestBeanModel;import com.example.simplemvp.model.ITestBeanModelImpv;import com.example.simplemvp.view.ITestBeanView;import java.util.List;/** * Created by feng on 2017/3/13. */public class TestBeanPresenter{    ITestBeanView mTestBeanView;    ITestBeanModel testBeanModel = new ITestBeanModelImpv();    public TestBeanPresenter(ITestBeanView mTestBeanView)    {        this.mTestBeanView = mTestBeanView;    }    /**     * bind view and model     */    public void fentch()    {        //显示进度条        if(testBeanModel != null)        {            testBeanModel.loadTestBeans( new ITestBeanModel.TestOnLoadListener()            {                @Override                public void onCompelete(List<TestBean> grils)                {                    mTestBeanView.showGrils( grils );                }            });        }    }}

数据适配器adapter:

package com.example.simplemvp.adapter;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.example.simplemvp.R;import com.example.simplemvp.beans.TestBean;import java.util.List;/** * Created by feng on 2017/3/13. */public class MyTestAdapter extends BaseAdapter{    private List<TestBean> mDatas;    private Context mContext;    public MyTestAdapter(List<TestBean> mDatas,Context context)    {        this.mDatas = mDatas;        this.mContext = context;    }    @Override    public int getCount()    {        return mDatas.size();    }    @Override    public Object getItem(int position)    {        return mDatas.get( position );    }    @Override    public long getItemId(int position)    {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent)    {        ViewHold hold = new ViewHold();        if(convertView == null)        {            convertView = View.inflate( mContext, R.layout.list_item, null );            hold.mIv = (ImageView) convertView.findViewById( R.id.image_name );            hold.mTvName = (TextView) convertView.findViewById( R.id.tv_name );            convertView.setTag( hold );        }else        {            hold = (ViewHold) convertView.getTag();        }        hold.mIv.setBackgroundResource( mDatas.get( position).getIcon() );        hold.mTvName.setText( mDatas.get( position ).getMsg() );        return convertView;    }    class ViewHold    {        ImageView mIv;        TextView mTvName;        TextView mTvAge;    }}

最后主MainActivity类 :

package com.example.simplemvp;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import com.example.simplemvp.adapter.MyTestAdapter;import com.example.simplemvp.beans.TestBean;import com.example.simplemvp.presenter.TestBeanPresenter;import com.example.simplemvp.view.ITestBeanView;import java.util.List;public class MainActivity extends AppCompatActivity implements ITestBeanView{    private ListView mListview;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate( savedInstanceState );        setContentView( R.layout.activity_main );        mListview = (ListView) findViewById( R.id.list_test );        //中间者,让他触发加载数据        new TestBeanPresenter( this).fentch();    }    @Override    public void showGrils(List<TestBean> tests)    {        mListview.setAdapter( new MyTestAdapter( tests, getApplicationContext() ) );    }}

效果图:
这里写图片描述

布局比较简单,这里就不做代码的展示了,最后谢谢大家的支持,喜欢的请顶一个

源码链接地址

0 0
原创粉丝点击