1show.xml布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.activity.ShowActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </android.support.v7.widget.RecyclerView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/s_checkbox" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="全选/反选" /> <TextView android:id="@+id/s_zongji" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="总计:" /> <Button android:id="@+id/s_but" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="去结算" /> </LinearLayout> </LinearLayout>
2showactivity--Iview层
package bweie.com.day0824.ui.activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.TextView; import com.google.gson.Gson; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import bweie.com.day0824.R; import bweie.com.day0824.bean.InfoBean; import bweie.com.day0824.di.IContract; import bweie.com.day0824.di.presenterimpl.PresenterImpl; import bweie.com.day0824.ui.adapter.InfolistAdapter; public class ShowActivity extends AppCompatActivity implements IContract.IView { private List<InfoBean.DataBean> data; private InfoBean infoBean; private InfolistAdapter listadapter; @BindView(R.id.recycler_view) RecyclerView recyclerView; @BindView(R.id.s_checkbox) CheckBox sCheckbox; @BindView(R.id.s_zongji) TextView sZongji; @BindView(R.id.s_but) Button sBut; private IContract.IPresenter iPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); ButterKnife.bind(this); iPresenter = new PresenterImpl(); iPresenter.AttData(this); iPresenter.InfoData(); } @Override public void ShowData(final String msg) { runOnUiThread(new Runnable() { @Override public void run() { Gson gson = new Gson(); infoBean = gson.fromJson(msg, InfoBean.class); data = infoBean.getData(); LinearLayoutManager layoutManager = new LinearLayoutManager(ShowActivity.this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(layoutManager); listadapter = new InfolistAdapter(ShowActivity.this, data); recyclerView.setAdapter(listadapter); listadapter.setOnItmeCheckPrice(new InfolistAdapter.OnItmeCheckPrice() { @Override public void OnItmeCheckPrice(double bargainPrice) { sZongji.setText(bargainPrice * 1+""); } }); //适配器点击 listadapter.onitmechecked(new InfolistAdapter.onsetitmelisente() { @Override public void onitmechecked(int position, boolean checked) { data.get(position).setCheckde(checked); boolean ta=true; for(InfoBean.DataBean dataBean:data){ if (dataBean.getisCheckde()==false){ ta=false; } sCheckbox.setChecked(ta); listadapter.notifyDataSetChanged(); } } }); } }); } @Override protected void onDestroy() { super.onDestroy(); iPresenter.DeleteData(this); } @OnClick({R.id.s_checkbox, R.id.s_but}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.s_checkbox: if (sCheckbox.isChecked()) { //如果是选中状态,设置recyclerview中的子条目全部被选中 for (int i = 0; i < data.size(); i++) { //对集合中的每个条目定义为被选中 data.get(i).setCheckde(true); } //刷新适配器 listadapter.notifyDataSetChanged(); } else { //如果是未选中状态,设置recyclerview中的子条目全部不被选中 for (int i = 0; i < data.size(); i++) { data.get(i).setCheckde(false); } //刷新适配器 listadapter.notifyDataSetChanged(); } break; case R.id.s_but: Intent intent=new Intent(ShowActivity.this,ClosingActivity.class); startActivity(intent); break; } } }
3......契约类
package bweie.com.day0824.di; public interface IContract { interface IView{ void ShowData(String msg); } interface IModel{ interface onCallBack{ void stringMsg(String Msg); } void requestData(onCallBack onCallBack); } interface IPresenter<IView>{ void AttData(IView iView); void DeleteData(IView iView); void InfoData(); } }
4............model层
package bweie.com.day0824.di.modelimpl; import java.io.IOException; import bweie.com.day0824.di.IContract; import bweie.com.day0824.utils.OkHttpUtils; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class ModelImpl implements IContract.IModel { private static final String URL="http://www.zhaoapi.cn/product/getCarts?uid=71"; @Override public void requestData(final onCallBack onCallBack) { OkHttpUtils.getInstance().get(URL, new Callback() { @Override public void onFailure(Call call, IOException e) { String estring = e.getMessage().toString(); onCallBack.stringMsg(estring); } @Override public void onResponse(Call call, Response response) throws IOException { String responseString = response.body().string(); onCallBack.stringMsg(responseString); } }); } }
5........presenter层
package bweie.com.day0824.di.presenterimpl; import java.lang.ref.WeakReference; import bweie.com.day0824.di.IContract; import bweie.com.day0824.di.modelimpl.ModelImpl; public class PresenterImpl implements IContract.IPresenter<IContract.IView> { IContract.IView iView; private IContract.IModel iModel; private WeakReference<IContract.IView> iViewWeakReference; private WeakReference<IContract.IModel> iModelWeakReference; @Override public void AttData(IContract.IView iView) { this.iView=iView; iModel = new ModelImpl(); iViewWeakReference = new WeakReference<>(iView); iModelWeakReference = new WeakReference<>(iModel); } @Override public void DeleteData(IContract.IView iView) { iViewWeakReference.clear(); iModelWeakReference.clear(); } @Override public void InfoData() { iModel.requestData(new IContract.IModel.onCallBack() { @Override public void stringMsg(String Msg) { iView.ShowData(Msg); } }); } }
6.infoBean 接口的有参无参构造
public class InfoBean { private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { //选中状态 private boolean isCheckde; public boolean getisCheckde() { return isCheckde; } public void setCheckde(boolean checkde) { isCheckde = checkde; } private String sellerName; private String sellerid; private List<ListBean> list; public String getSellerName() { return sellerName; } public void setSellerName(String sellerName) { this.sellerName = sellerName; } public String getSellerid() { return sellerid; } public void setSellerid(String sellerid) { this.sellerid = sellerid; } public List<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public static class ListBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int num; private int pid; private double price; private int pscid; private int selected; private int sellerid; private String subhead; private String title;
7...utils 工具类
package bweie.com.day0824.utils; import android.view.View; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; public class OkHttpUtils { private static OkHttpUtils okHttpUtils; OkHttpClient okHttpClient; private OkHttpUtils(){ if (null==okHttpClient){ synchronized (OkHttpClient.class){ if (null==okHttpClient){ okHttpClient = new OkHttpClient.Builder().build(); } } } } public static OkHttpUtils getInstance(){ if (null==okHttpUtils){ synchronized (OkHttpUtils.class){ if (null==okHttpUtils){ okHttpUtils = new OkHttpUtils(); } } } return okHttpUtils; } public void get(String stringurl, Callback callback){ Request request = new Request.Builder().url(stringurl).build(); okHttpClient.newCall(request).enqueue(callback); } public void post(String stringurl, FormBody formBody, Callback callback){ Request request = new Request.Builder().method("POST", formBody).url(stringurl).build(); okHttpClient.newCall(request).enqueue(callback); } }
8.....................infoadapter适配器
package bweie.com.day0824.ui.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import com.squareup.picasso.Picasso; import java.util.List; import bweie.com.day0824.R; import bweie.com.day0824.bean.InfoBean; import bweie.com.day0824.ui.widget.AddDeleteView; public class InfolistAdapter extends RecyclerView.Adapter<InfolistAdapter.VooHolder> { Context context; List<InfoBean.DataBean> data; private OnItmeCheckPrice onItmeCheckPrice; public InfolistAdapter(Context context, List<InfoBean.DataBean> data) { this.context = context; this.data = data; } @NonNull @Override public VooHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.listactivity, parent, false); VooHolder vooHolder = new VooHolder(view); return vooHolder; } @Override public void onBindViewHolder(@NonNull VooHolder holder, final int position) { String images = data.get(position).getList().get(0).getImages(); if (images.contains("|")&&images!=null){ String[] split = images.split("\\|"); Picasso.with(context).load(split[0]).into(holder.list_img); }else{ Picasso.with(context).load(images).into(holder.list_img); } holder.list_price.setText("单价是:" +data.get(position).getList().get(0).getPrice()+"¥"); holder.list_list.setText(data.get(position).getList().get(0).getTitle()); holder.list_checkbox.setChecked(data.get(position).getisCheckde()); //加减 holder.list_adddelete.setNumber((int)data.get(position).getList().get(0).getNum()); holder.list_adddelete.setUpdataNums(new AddDeleteView.UpdataNum(){ @Override public void updata(int num) { data.get(position).getList().get(0).setNum(num); notifyDataSetChanged(); } }); //当点击按钮时 回传价格 holder.list_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked){ double bargainPrice = data.get(position).getList().get(0).getPrice(); onItmeCheckPrice.OnItmeCheckPrice(bargainPrice); } } }); } @Override public int getItemCount() { return data.size(); } class VooHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private CheckBox list_checkbox; private ImageView list_img; private TextView list_list; private TextView list_price; private AddDeleteView list_adddelete; public VooHolder(View itemView) { super(itemView); list_checkbox = itemView.findViewById(R.id.list_checkbox); list_img = itemView.findViewById(R.id.list_img); list_list = itemView.findViewById(R.id.list_list); list_price = itemView.findViewById(R.id.list_price); //加减 list_adddelete = itemView.findViewById(R.id.list_AddDelete); //多选框被点击时 list_checkbox.setOnClickListener(this); } //多选框被点击时 @Override public void onClick(View v) { int position = getLayoutPosition(); boolean checked = list_checkbox.isChecked(); onsetitmelisente.onitmechecked(position,checked); } } //选中的状态 public interface onsetitmelisente{ void onitmechecked(int position, boolean checked); } onsetitmelisente onsetitmelisente; public void onitmechecked(onsetitmelisente onsetitmelisente){ this.onsetitmelisente=onsetitmelisente; } //总计 public interface OnItmeCheckPrice{ void OnItmeCheckPrice(double bargainPrice); } public void setOnItmeCheckPrice(OnItmeCheckPrice onItmeCheckPrice){ this.onItmeCheckPrice = onItmeCheckPrice; } }
9.......列表的布局listactivity
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/list_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/list_img" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher_background" android:layout_toRightOf="@+id/list_checkbox" /> <TextView android:id="@+id/list_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xx" android:layout_toRightOf="@+id/list_img" /> <TextView android:id="@+id/list_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xx" android:layout_toRightOf="@+id/list_img" android:layout_below="@+id/list_list" /> <bweie.com.day0824.ui.widget.AddDeleteView android:id="@+id/list_AddDelete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/list_price" android:layout_toRightOf="@+id/list_img" > </bweie.com.day0824.ui.widget.AddDeleteView> </RelativeLayout>
10.......加减的布局jiajian.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/z_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-" /> <TextView android:id="@+id/z_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /> <Button android:id="@+id/z_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" /> </LinearLayout>
11.AddDeleteView
public class AddDeleteView extends LinearLayout { private Button delete; private Button adds; private TextView number; public AddDeleteView(Context context) { super(context); } public AddDeleteView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } //用于接受数据 public void setNumber(int nums){ number.setText(nums+""); } //接口 public interface UpdataNum{ void updata(int num); } private UpdataNum updataNum; public void setUpdataNums(UpdataNum updataNum){ this.updataNum=updataNum; } private void init(final Context context) { View view = View.inflate(context, R.layout.jiajian, this); //减号 delete = view.findViewById(R.id.z_delete); //加号 adds = view.findViewById(R.id.z_add); //中间的那个值 number = view.findViewById(R.id.z_number); adds.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String s = number.getText().toString(); int nums =new Integer(s); nums++; number.setText(nums+""); updataNum.updata(nums); } }); delete.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String s = number.getText().toString(); int nums =new Integer(s); if (nums>1){ nums--; number.setText(nums+""); updataNum.updata(nums); }else{ Toast.makeText(context,"商品数量不能小于1",Toast.LENGTH_LONG).show(); } } }); } }