Mvp的实现以及解绑的关系

来源:互联网 发布:淘宝买处方药审核难吗 编辑:程序博客网 时间:2024/05/09 22:39

首先咱们来实现一下MVP的这个过程,通过M,V层与P层交互拿到数据展示给View。

 分包一定要明确

       

  Modle层实现的书写,一般这个层次是用来获取网络数据,对数据进行一定操作,拿到  数据传到P层

import java.util.ArrayList;import java.util.List;public class ItemModle {    //自拟数据    public void getData(){        List<String> list                 = new ArrayList<>();        for (int i = 0;i<50;i++){            list.add("数据" + i);        }        //传递数据        getData.Success(list);    }    //拿到对象可以让本类中的数据调用    GetData getData ;    //实现set方法    public void setGetData(GetData getData) {        this.getData = getData;    }    //实现向P层传递数据的接口    public interface GetData{        void Success(List<String> list);    }}

View层书写一些接口利用接口传递给view的数据

 public interface ItemView {    void Success(List<String> list);}

Presenter层主要实现的是M层与V层交互的一些逻辑,对activity做一些逻辑的处理

import android.util.Log;import java.lang.ref.WeakReference;import java.util.List;import liuhao.baway.com.mvp_jiebang.modle.ItemModle;import liuhao.baway.com.mvp_jiebang.view.ItemView;public class ItemPrensenter implements ItemModle.GetData,Ipsenter<ItemView>{    //拿到对象m,v    private ItemModle itemModle ;    //通过软引用解除绑定的关系    private WeakReference<ItemView> weak ;    //构造方法    public ItemPrensenter(ItemView itemView) {        this.itemModle= new ItemModle();        //关联        onAttach(itemView);        itemModle.setGetData(this);    }    //拿到数据    public void getData(){        itemModle.getData();    }    //实现方法    @Override    public void onAttach(ItemView itemView){        weak = new WeakReference<ItemView>(itemView);    }    //解绑的方法    @Override    public void onDettach() {        weak.clear();        //log测试输出        Log.d("qq","解绑成功");    }    //获取数据成功的方法传递到v层    @Override    public void Success(List<String> list) {          weak.get().Success(list);    }}

添加一个公共的实现解绑关系的接口,让P层去实现

public interface Ipsenter<T> {    //公共方法public void onAttach(T itemview);public void onDettach();}

最后呢,在activity中实现

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.List;import liuhao.baway.com.mvp_jiebang.presenter.ItemPrensenter;import liuhao.baway.com.mvp_jiebang.view.ItemView;public class MainActivity extends AppCompatActivity implements ItemView{     private ListView lv;     private ItemPrensenter itempresenter ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件id        initView();        //获取数据        itempresenter.getData();    }    //初始化控件    private void initView() {        lv = (ListView) findViewById(R.id.listview);        itempresenter = new ItemPrensenter(this);    }    //通过P层成功拿到数据执行的方法    @Override    public void Success(List<String> list) {        ArrayAdapter a = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,list);        lv.setAdapter(a);    }    @Override    protected void onDestroy() {        super.onDestroy();       itempresenter.onDettach();        Log.d("BaseActivity","解绑成功");    }}


 最后奉上打印的结果

这就是我对于MvP的一些用法,希望各位读者多多手下留笔!!!

原创粉丝点击