Android 简单的MVP实例

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

实现一个简单的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() ) );
    }
}

效果图:
这里写图片描述

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

源码链接地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值