首先我们创建一个最大的接口Contrat然后创建MVP框架让类实现Contract方法
//Contract
public interface Kfc_Contract {
//View层
public interface Kfc_View {
public void KfcView(String message);
}
//Persenter
public interface Kfc_Persenter<Kfc_View> {
public void attathView(Kfc_View kfc_view);
public void daetchView(Kfc_View kfc_view);
//请求数据
public void requestData();
}
//M层
public interface Kfc_Model {
public void getkfcData(Callback_kfc callback_kfc);
//接口回调
public interface Callback_kfc {
public void Response(String message);
}
}
}
接下来我们现在View层实现方法
创建P层
kfcPersenter = new KfcPersenter();
//绑定
kfcPersenter.attathView(this);
kfcPersenter.requestData();
@Override
public void KfcView(final String message) {
runOnUiThread(new Runnable() {
//V层方法
private OneAdapter oneAdapter;
private List<KFCBean.DataBean> data;
@Override
public void run() {
int i = 0;
Gson gson = new Gson();
KFCBean kfcBean = gson.fromJson(message, KFCBean.class);
data = kfcBean.getData();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
rlv.setLayoutManager(linearLayoutManager);
oneAdapter = new OneAdapter(data, MainActivity.this);
rlv.setAdapter(oneAdapter);
//选中
che.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
/* //总价
double totalCount=0;*/
for (int i = 0; i < data.size(); i++) {
//一级商家全部选中
data.get(i).setCheckbox(isChecked);
//二级数据选中
for (int j = 0; j < data.get(i).getSpus().size(); j++) {
data.get(i).getSpus().get(j).setCheckbox(isChecked);
/* if (isChecked==false)
{
}*/
}
}
oneAdapter.notifyDataSetChanged();
}
});
}
});
}
接下来我们在P层去做一些内存泄漏和数据的传值以及回调
@Override
//做一个内存泄漏
public void attathView(Kfc_Contract.Kfc_View kfc_view) {
this.kfc_view = kfc_view;
//实例化M层
kfcModel = new KfcModel();
//内存泄漏
softReference = new SoftReference<>(kfcModel);
}
//解绑
@Override
public void daetchView(Kfc_Contract.Kfc_View kfc_view) {
//清理内存
softReference.clear();
}
//调用M层请求数据然后再传给V层展示
@Override
public void requestData() {
kfcModel.getkfcData(new Kfc_Contract.Kfc_Model.Callback_kfc() {
@Override
public void Response(String message) {
kfc_view.KfcView(message);
}
});
}