版权声明:本文为博主原创文章,未经博主允许不得转载
实现一个简单的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() ) );
}
}
效果图:
布局比较简单,这里就不做代码的展示了,最后谢谢大家的支持,喜欢的请顶一个