android之MVP设计模式详解
2016-10-09 17:44
453 查看
MVP是微软提出的一种架构设计模式。在android应用的开发中目前使用非常广泛。分别为Modle:业务逻辑,View:视图,Presenter:中间着。(用于绑定Modle和View)Modle用来加载数据,View用来显示数据,Presenter用来绑定Modle和View的联系。
下面来看具体的代码实现:
一,上图看一下简单的项目结构
二,定义一个GirlModle接口
/** * Created by 晁东洋 on 2016/10/9. */ public interface GirleModle { //加载数据 void loadGirl( GirlonLoadListener loadListener); //加载完成的监听 interface GirlonLoadListener{ void onComplate(List<Girl> list); } }
三,定义一个GrilView的接口
/** * Created by 晁东洋 on 2016/10/9. */ public interface GirlView { //加载进度条 void showLoading(); //加载数据 void showGilrs(List<Girl> list); }
四,定义一个Gril的bean数据源
package com.hdceping.www.mytest.bean; /** * Created by 晁东洋 on 2016/10/9. */ public class Girl { private String imageUrl; private String title; private String name; public String getImageUrl() { return imageUrl; } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Girl(String imageUrl, String title, String name) { this.imageUrl = imageUrl; this.title = title; this.name = name; } }
五,定义GrileModleImpl类,实现GrileModel接口。
package com.hdceping.www.mytest.modle.impl; import com.hdceping.www.mytest.bean.Girl; import com.hdceping.www.mytest.modle.GirleModle; import java.util.ArrayList; import java.util.List; /** * Created by 晁东洋 on 2016/10/9. */ public class GirleModleImpl implements GirleModle { @Override public void loadGirl(GirlonLoadListener loadListener) { List<Girl> data = new ArrayList<>(); data.add(new Girl("http://a4.topitme.com/o/201012/20/12928333231233.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-10-09/100567-coL4Krz.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-10-09/100567-rtUVwh5.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-05-31/77772-Qu2Dx3h.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-10-09/100567-Olhb7Ll.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-10-09/100567-coL4Krz.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-10-09/100567-rtUVwh5.jpg","图片","美女图片")); data.add(new Girl("http://tp.85814.com/d/file/meinv/2016-05-31/77772-Qu2Dx3h.jpg","图片","美女图片")); //回掉完成监听 loadListener.onComplate(data); } }
六,定义GrilPersenter类,实现业务逻辑和View的绑定:
package com.hdceping.www.mytest.persenter; import com.hdceping.www.mytest.bean.Girl; import com.hdceping.www.mytest.modle.GirleModle; import com.hdceping.www.mytest.modle.impl.GirleModleImpl; import com.hdceping.www.mytest.view.GirlView; import java.util.List; /** * Created by 晁东洋 on 2016/10/9. */ public class GirlPersenter { GirlView mGirlView; GirleModle mGirleModle = new GirleModleImpl(); public GirlPersenter(GirlView girlView) { mGirlView = girlView; } public void fetch(){ //显示进度条 mGirlView.showLoading(); //加载数据 if (mGirleModle != null){ mGirleModle.loadGirl(new GirleModle.GirlonLoadListener() { @Override public void onComplate(List<Girl> list) { mGirlView.showGilrs(list); } }); } } }
七,MainActivity类。
package com.hdceping.www.mytest; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.Toast; import com.hdceping.www.mytest.adapter.ListGirlAdapter; import com.hdceping.www.mytest.bean.Girl; import com.hdceping.www.mytest.persenter.GirlPersenter; import com.hdceping.www.mytest.view.GirlView; import java.util.List; public class MainActivity extends AppCompatActivity implements GirlView{ private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.mvp_Listview); new GirlPersenter(this).fetch(); } @Override public void showLoading() { Toast.makeText(this,"拼命加载中",Toast.LENGTH_LONG); } @Override public void showGilrs(List<Girl> list) { mListView.setAdapter(new ListGirlAdapter(this,this,list)); } }
八,我的布局文件。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.hdceping.www.mytest.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/mvp_Listview"></ListView> </RelativeLayout>
九,adapter的代码:
package com.hdceping.www.mytest.adapter; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.hdceping.www.mytest.R; import com.hdceping.www.mytest.bean.Girl; import java.util.List; /** * Created by 晁东洋 on 2016/10/9. */ public class ListGirlAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Girl> mList; private Activity mActivity; private Context mContext; public ListGirlAdapter(Activity activity, Context mContext, List<Girl> list) { mInflater = LayoutInflater.from(mContext); mList = list; mActivity = activity; this.mContext = mContext; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder =null; if (viewHolder == null){ convertView = mInflater.inflate(R.layout.layout_item,null); viewHolder = new ViewHolder(); viewHolder.imageview_mvp = (ImageView)convertView.findViewById(R.id.imageview_mvp); viewHolder.text_mvp = (TextView)convertView.findViewById(R.id.text_mvp); viewHolder.text2_mvp = (TextView)convertView.findViewById(R.id.text2_mvp); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder)convertView.getTag(); } Log.e("网络地址",mList.get(position).getImageUrl()); Glide.with(mContext).load(mList.get(position).getImageUrl()).listener(mRequestListener).error(R.mipmap.ic_launcher).into(viewHolder.imageview_mvp); viewHolder.text_mvp.setText(mList.get(position).getTitle()); viewHolder.text2_mvp.setText(mList.get(position).getName()); return convertView; } private RequestListener<String, GlideDrawable> mRequestListener = new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { //显示错误信息 Log.e("TAG", "onException: ", e); //打印请求URL Log.e("TAG", "onException: " + model); //打印请求是否还在进行 Log.e("TAG", "onException: " + target.getRequest().isRunning()); return false; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { return false; } }; class ViewHolder{ private ImageView imageview_mvp; private TextView text_mvp; private TextView text2_mvp; } }大家可以看到MVP设计模式,其实有大量的接口和回掉编写代码。主要是设计思路。仔细看还是能看看懂的。如果有问题一起探讨。
相关文章推荐
- 设计模式——Android 常用设计模式之MVP详解及项目实战
- android设计模式之mvp详解
- android设计模式之单例模式详解
- Android mvp 设计模式目录架构设计
- Android之MVP设计模式
- 浅谈Android MVP设计模式(简单结合RxJava+Retrofit)
- android MVP 设计模式
- Android 设计模式之一:MVP模式与MVC模式
- android设计模式之观察者模式详解
- 详解Android MVP开发模式
- Android---MVP设计模式中级(二)
- Android设计模式之浅谈MVP
- 基于MVP设计模式的Android应用架构设计
- Android 中如何使用MVP设计模式
- MVP模式在android中的流程详解
- android java 设计模式详解 Demo
- Android常见的设计模式详解
- android MVP设计模式
- Android中MVP设计模式实例
- Android 设计模式之二:MVP模式与MVC模式 .