Mvp的实现以及解绑的关系

本文详细介绍MVP架构的应用方法,包括Model、View与Presenter各层的功能划分及交互逻辑,并通过实例展示了如何在Android应用中实现MVP模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先咱们来实现一下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的一些用法,希望各位读者多多手下留笔!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值