MVP框架列表

本文深入探讨了MVP(Model-View-Presenter)架构模式在Android应用开发中的应用,详细讲解了IHomeContract接口如何定义View、Presenter和Model之间的交互契约,通过ShowActivity实现了View层与Presenter层的绑定及数据展示,同时阐述了Presenter如何调用Model进行数据请求,并通过回调机制更新UI。

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

契约类

public interface IHomeContract {
    public interface IHomeView {
        //回显数据
        public void showData(HomeBean homeBean);
    }
    //P层
    public interface IHomePresenter<IHomeView> {
        //绑定
        public void attahView(IHomeContract.IHomeView homeView);

        //解绑
        public void detachView(IHomeContract.IHomeView homeView);

        //数据获取
        public void requestData();
    }
    //M层
    public interface IHomeModel {
        //请求数据
        public void containData(CallBack callBack);

        //接口回调
        public interface CallBack {
            public void onCallBack(HomeBean repsoneData);
        }
    }
}

V层

public class ShowActivity extends AppCompatActivity implements IHomeContract.IHomeView,IShoppingContract.IShoppingView {

    @BindView(R.id.sRecyclerView)
    RecyclerView sRecyclerView;
    @BindView(R.id.recyclerView)
    RecyclerView recyclerView;
    private HomePresenter presenter;
    Context context;
    private ShoppingPresenter presenter1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        ButterKnife.bind(this);
        context = ShowActivity.this;
        presenter = new HomePresenter();
        presenter.attahView(this);
        presenter.requestData();

        presenter1 = new ShoppingPresenter();
        presenter1.attahView(this);
        presenter1.requestData();
    }

    @Override
    public void showData(HomeBean homeBean) {
        List<HomeBean.DataBean> list = homeBean.getData();
        GridLayoutManager manager = new GridLayoutManager(context, 5, GridLayoutManager.VERTICAL, false);
        sRecyclerView.setLayoutManager(manager);
        HomeAdapter homeAdapter = new HomeAdapter(R.layout.item, list);
        sRecyclerView.setAdapter(homeAdapter);
    }
    @Override
    public void showDatas(ShoppingBean repsoneData) {
        List<ShoppingBean.DataBean> data = repsoneData.getData();
        LinearLayoutManager manager = new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(manager);
        ShoppingAdapter shoppingAdapter = new ShoppingAdapter(R.layout.item1,data);
        recyclerView.setAdapter(shoppingAdapter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachView(this);
        presenter1.detachView(this);
    }
}

P层

public class HomePresenter implements IHomeContract.IHomePresenter<IHomeContract.IHomeView> {
    IHomeContract.IHomeView homeView;
    private SoftReference<IHomeContract.IHomeView> reference;
    private HomeModel model;

    @Override
    public void attahView(IHomeContract.IHomeView homeView) {
        this.homeView = homeView;
        reference = new SoftReference<>(homeView);
        model = new HomeModel();
    }

    @Override
    public void detachView(IHomeContract.IHomeView homeView) {
        reference.clear();
    }

    @Override
    public void requestData() {
        model.containData(new IHomeContract.IHomeModel.CallBack() {
            @Override
            public void onCallBack(HomeBean repsoneData) {
                homeView.showData(repsoneData);
            }
        });
    }
}

M层

public class HomeModel implements IHomeContract.IHomeModel {
    @Override
    public void containData(final CallBack callBack) {
        OkGo.<String>get(Constant.HOME).execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                String responseData = response.body().toString();
                Gson gson = new Gson();
                HomeBean homeBean = gson.fromJson(responseData, HomeBean.class);
                callBack.onCallBack(homeBean);
            }
        });
    }
}

Adapter

public class HomeAdapter extends BaseQuickAdapter<HomeBean.DataBean,BaseViewHolder> {
    public HomeAdapter(int layoutResId, @Nullable List<HomeBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, HomeBean.DataBean item) {
        helper.setText(R.id.iTextView,item.getName());
        Glide.with(mContext).load(item.getIcon()).into((ImageView) helper.getView(R.id.iImageView));
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值