MVP
来源:互联网 发布:中世纪盔甲 知乎 编辑:程序博客网 时间:2024/06/01 09:50
mvp的实例:v层的接口:import com.honey.mvp.entity.News;import java.util.List;public interface HomeView { //展示数据 v层负责展示数据 void showListData(List<News.ResultBean.DataBean> list);}现在是p层的接口:/** * presenter层接口 p层的副接口 */public interface IHomePretsenter<T> { //T为泛型 相当于object void attach(T view);//绑定 void detach();//解绑}和p层的实例用法:import android.util.Log;import com.honey.mvp.entity.News;import com.honey.mvp.model.HomeModel;import com.honey.mvp.model.IHomeModel;import com.honey.mvp.view.HomeView;import java.lang.ref.WeakReference;import java.util.List;/** * p层 让m层与v层交互 p层负责处理逻辑 */public class HomePresenter implements IHomePretsenter<HomeView>{ //HomeView view; IHomeModel model; //双层保证 不会出现内存泄漏 //1、软引用 在内存不足时会回收 如果Activity意外终止 使用该方式能保证 WeakReference<HomeView> mRefView; //2、通过手动的方式直接释放 activity销毁时直接回收 public HomePresenter(HomeView view) { this.model = new HomeModel(); attach(view); } //进行和View层的绑定 activity @Override public void attach(HomeView view) { mRefView = new WeakReference(view); } //解绑 @Override public void detach() { mRefView.clear(); Log.i("======", "detach: " + "解绑"); } //提供的一个 让model数据加载在view上的方法 public void getData(){ model.loadData(new IHomeModel.HomeDataCallback() { @Override public void complete(List<News.ResultBean.DataBean> list) { System.out.println("======list"+list); mRefView.get().showListData(list); } }); }}现在m层的接口:import com.honey.mvp.entity.News;import java.util.List;public interface IHomeModel { void loadData(HomeDataCallback callback);//加载数据 //回调接口 interface HomeDataCallback{ void complete(List<News.ResultBean.DataBean> list); }}接下来就是m层的实例:import com.google.gson.Gson;import com.honey.mvp.app.App;import com.honey.mvp.entity.News;import java.io.IOException;import java.util.List;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;import xp.code.okhttp3.utils.OkHttp3Utils;/** * m层 负责请求数据 */public class HomeModel implements IHomeModel{ @Override public void loadData(final HomeDataCallback callback) {// List list=new ArrayList();// for(int i=0;i<100;i++){// list.add("你好"+i);// }// //回调model成中的接口// callback.complete(list); OkHttp3Utils.doGet(App.URL, null, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); System.out.println("======string"+string); Gson gson=new Gson(); News news = gson.fromJson(string, News.class); List<News.ResultBean.DataBean> data = news.getResult().getData(); callback.complete(data); } }); }}接下来就是MainActivity中的代码了:import android.os.Bundle;import android.widget.ListView;import com.honey.mvp.adapter.MyAdapter;import com.honey.mvp.entity.News;import com.honey.mvp.presenter.HomePresenter;import com.honey.mvp.view.HomeView;import java.util.List;public class MainActivity extends BaseActivity<HomePresenter> implements HomeView{ private ListView listView; private HomePresenter presenter;//p层 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化空件 initView(); presenter.getData(); } //是由BaseActvity提供 在BaseActivity的onCreate方法中调用 @Override public void createPresenter() { presenter = new HomePresenter(this); } /** * 获取控件 */ public void initView() { listView=findViewById(R.id.listView); } //由View接口提供的方法 使用Model给的数据进行展示 @Override public void showListData(List<News.ResultBean.DataBean> list) { System.out.println("======list"+list.size()); MyAdapter adapter=new MyAdapter(MainActivity.this,list); listView.setAdapter(adapter); }}因为我们用实现的是BaseActivity,所以我们再来写一个BaseActivity的用法:import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import com.honey.mvp.presenter.IHomePretsenter;public abstract class BaseActivity<T extends IHomePretsenter> extends AppCompatActivity{ //使用范型定义个Presenter对象 该范型必须满足IPresenter类型 所以使用<T extends IPresenter> T presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); createPresenter(); initView(); } public abstract void createPresenter(); public abstract void initView(); //让所有的Activity销毁时 统一在Base中进行和Presenter解绑 @Override protected void onDestroy() { super.onDestroy(); if(presenter != null){ presenter.detach(); } }}因为我们请求的是网上的数据,所以根据习惯我们会用OKhttp来获取,要用到bean类,app,适配器,这里就不一一列举了,以上就是基本的mvp的用法了。
阅读全文
0 0
- MVP
- MVP
- MVP
- MVP
- MVP
- MVP
- MVP
- MVP
- mvp
- MVP
- MVP
- mvp
- MVP
- MVP
- MVP
- MVP
- MVP
- MVP
- 阿里云CentOS-7.2安装mysql
- iOS 面试题~RunLoop和线程的关系?runloop的mode作用是什么?
- 变形
- 牛客网前端编程题库及答案汇总(中)
- listview
- MVP
- 13. Roman to Integer
- view 画出一个形状,并在里面添加内容+文本居中
- Java 使用Jedis操作Redis
- 自定义View-仿小米运动 连接效果
- Java内存模型之happens-before
- ECMAScript6的使用心得
- 机房——彻底明白机房中模块的代码的逻辑与含义
- python学习笔记(一)