接口:
public interface Check { void checkli(int itemnum); }
public interface OnItemClickListener { void onItemClick(View view, int position); }
两个Adapter:
1.shopAda[ter
package test.bwie.shopcar.Adapter; import android.content.Context; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.TextView; import android.widget.Toast; import java.util.List; import java.util.Map; import test.bwie.shopcar.OnItemClickListener; import test.bwie.shopcar.R; import test.bwie.shopcar.bean.Check; import test.bwie.shopcar.bean.ShopCar; /** * Created by 蒋六六 on 2017/10/18. */ public class ShopAdapter extends RecyclerView.Adapter{ private List data; private Context content; private String uid; private Map map; public ShopAdapter(Context content, List data, String uid) { this.content=content; this.data=data; this.uid=uid; } public delect dd; public void setdelect(delect dd){ this.dd=dd; } public Qcheck qq; public void setQcheck(Qcheck qq){ this.qq=qq; } @Override public CarAdapter onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(content, R.layout.shapcar1_item, null); CarAdapter car=new CarAdapter(inflate); return car; } @Override public void onBindViewHolder(final CarAdapter holder, int position) { String sellerName = data.get(position).sellerName; final List lliisstt = data.get(position).list; // boolean ff=true; for (ShopCar.DataBean.ListBean listBean : lliisstt) { if (listBean.selected==0){ ff=false; } } holder.ckk.setChecked(ff); // holder.tv_shophome.setText(sellerName); holder.shop_li_recycle.setLayoutManager(new LinearLayoutManager(content)); final ShopCarLi caliadapter = new ShopCarLi(content, lliisstt); holder.shop_li_recycle.setAdapter(caliadapter); //==================================================== caliadapter.setCheck(new Check() { @Override public void checkli(final int itemnum) { boolean f=true; for (ShopCar.DataBean.ListBean listBean : lliisstt) { if(listBean.selected==0){ f=false; } } //商家选框 holder.ckk.setChecked(f); //holder.get商家条目,itemnum商品条目 qq.one(holder.getLayoutPosition(),itemnum); } }); holder.ckk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (ShopCar.DataBean.ListBean listBean : lliisstt) { if(holder.ckk.isChecked()){ listBean.selected=1; }else { listBean.selected=0; } } qq.two(holder.getLayoutPosition()); caliadapter.notifyDataSetChanged(); } }); caliadapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { Adleg(position,dd,holder.getLayoutPosition()); } private void Adleg(final int position, final delect dd, final int layoutPosition) { AlertDialog.Builder builder=new AlertDialog.Builder(content); builder.setTitle("删除,请三思"); builder.setMessage("这可是你自己要删除的,想好了啊"); builder.setPositiveButton("去意已决", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface,final int i) { String pid = lliisstt.get(position).pid; dd.dele(pid,position,layoutPosition); } }).create(); builder.setNegativeButton("我再想想", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(content,"少侠,你很机智",Toast.LENGTH_SHORT).show(); } }).create(); builder.show(); } }); //====================================================== } @Override public int getItemCount() { return data.size(); } class CarAdapter extends RecyclerView.ViewHolder{ private TextView tv_shophome; private RecyclerView shop_li_recycle; private CheckBox ckk; public CarAdapter(View itemView) { super(itemView); tv_shophome = itemView.findViewById(R.id.tv_shophome); shop_li_recycle = itemView.findViewById(R.id.shop_li_recy); ckk = itemView.findViewById(R.id.ck_shophome); } } public interface Qcheck{ void one(int i, int o); void two(int p); } public interface delect{ void dele(String pid, int postion, int p); } }
2.ShopCarLi
package test.bwie.shopcar.Adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; 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.bumptech.glide.Glide; import java.util.List; import test.bwie.shopcar.OnItemClickListener; import test.bwie.shopcar.R; import test.bwie.shopcar.bean.Check; import test.bwie.shopcar.bean.ShopCar; /** * Created by 蒋六六 on 2017/10/18. */ public class ShopCarLi extends RecyclerView.Adapter/////////Main{ public Context context; public List list; public Check check; public void setCheck(Check check){ this.check=check; } public OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.onItemClickListener=onItemClickListener;} public ShopCarLi(Context content, List lliisstt) { this.context=content; this.list=lliisstt; } @Override public Carli onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.shopcar2_item, null); Carli car=new Carli(inflate); return car; } @Override public void onBindViewHolder(final Carli holder, final int position) { String images = list.get(position).images; String[] split = images.split("\\|"); if(list.get(position).selected==0){ holder.ck.setChecked(false); }else { holder.ck.setChecked(true); } holder.ck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b){ list.get(position).selected=1; }else { list.get(position).selected=0; } if(check!=null){ check.checkli(holder.getLayoutPosition()); } } }); Glide.with(context).load(split[0]).into(holder.img); holder.tv.setText(list.get(position).subhead); holder.tv1.setText(list.get(position).title); holder.tv2.setText("¥"+list.get(position).price); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClickListener.onItemClick(holder.itemView,position); } }); } @Override public int getItemCount() { return list.size(); } class Carli extends RecyclerView.ViewHolder{ public ImageView img; public TextView tv; public TextView tv1; public TextView tv2; public CheckBox ck; public Carli(View itemView) { super(itemView); img = itemView.findViewById(R.id.imageView12); tv=itemView.findViewById(R.id.tv_jianjie); tv1=itemView.findViewById(R.id.tv_jianjie2); tv2=itemView.findViewById(R.id.tv_shop_price); ck=itemView.findViewById(R.id.ck_gt); } } }
package test.bwie.shopcar; 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.CheckBox; import android.widget.TextView; import android.widget.Toast; import com.google.gson.Gson; import java.io.IOException; import java.text.DecimalFormat; import java.util.HashMap; import java.util.List; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; import test.bwie.shopcar.Adapter.ShopAdapter; import test.bwie.shopcar.bean.ShopCar; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private int sumNum; private Double sumPrice = 0.0; private DecimalFormat decimalFormat; private RecyclerView car_recy; private CheckBox mCheckboxQuanxuan; private TextView tv_sum; private TextView mJiesuanButton; private String url="http://120.27.23.105/product/getCarts?uid=185"; private List下面贴出布局data; private ShopAdapter shopadapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); okhttp(); decimalFormat = new DecimalFormat("#0.00"); } private void okhttp() { NetRequestUtils.ok(url, new Callback() { private ShopCar shopCar; @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); Gson gson=new Gson(); ShopCar shopCar = gson.fromJson(string, ShopCar.class); data = shopCar.data; if (data!=null){ for (ShopCar.DataBean dataBean : data) { for (ShopCar.DataBean.ListBean listBean : dataBean.list) { if (listBean.selected==1){ sumNum++; sumPrice = sumPrice + Double.parseDouble(listBean.price); }}} //==========分割线 runOnUiThread(new Runnable() { @Override public void run() { tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice)); mJiesuanButton.setText("去结算("+sumNum+")"); shopadapter = new ShopAdapter(MainActivity.this, data, "185"); car_recy.setAdapter(shopadapter); delect(); shopadapter.setQcheck(new ShopAdapter.Qcheck() { @Override public void one(int i, int o) { // TODO: 2017/10/21 商品选中状态改变计算价格 String p = data.get(i).list.get(o).price; if (data.get(i).list.get(o).selected == 1){ sumPrice = sumPrice + Double.parseDouble(p); sumNum++; } else { sumPrice = sumPrice - Double.parseDouble(p); sumNum--; } tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice)); mJiesuanButton.setText("去结算("+sumNum+")"); //-------------------华丽的分割线--------------- boolean f = true; for (ShopCar.DataBean dataBean : data) { for (ShopCar.DataBean.ListBean listBean : dataBean.list) { if (listBean.selected == 0) { f = false; } } } mCheckboxQuanxuan.setChecked(f); } @Override public void two(int p) { boolean f = true; for (ShopCar.DataBean dataBean : data) { for (ShopCar.DataBean.ListBean listBean : dataBean.list) { if (listBean.selected == 0) { f = false; } } } mCheckboxQuanxuan.setChecked(f); } }); } }); } } }); } private void delect() { shopadapter.setdelect(new ShopAdapter.delect() { @Override public void dele(String pid, final int postion, final int lapotion) { Map map = new HashMap (); map.put("pid", pid); map.put("uid", "185"); NetRequestUtils.chuan(map, "http://120.27.23.105/product/deleteCart", new NetRequestUtils.OkhttpIn() { @Override public void onresponse(String string) { runOnUiThread(new Runnable() { @Override public void run() { data.get(lapotion).list.remove(postion); for (int i = 0; i < data.size(); i++) { if (data.get(i).list.size() == 0) { data.remove(i); } } shopadapter.notifyDataSetChanged(); }});}});}}); } private void initView() { car_recy = (RecyclerView) findViewById(R.id.shopcar_recycle); car_recy.setLayoutManager(new LinearLayoutManager(MainActivity.this)); mCheckboxQuanxuan = (CheckBox) findViewById(R.id.checkbox_quanxuan); mCheckboxQuanxuan.setOnClickListener(this); tv_sum = (TextView) findViewById(R.id.tv_sum); mJiesuanButton = (TextView) findViewById(R.id.jiesuan_button); mJiesuanButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.shopcar_recycle: break; case R.id.checkbox_quanxuan: QXcheck(); break; case R.id.jiesuan_button: int num=1; if(num>0){ Toast.makeText(MainActivity.this,decimalFormat.format(sumPrice),Toast.LENGTH_SHORT).show(); } break; } } private void QXcheck() { for (ShopCar.DataBean dataBean : data) { for (ShopCar.DataBean.ListBean listBean : dataBean.list) { if(mCheckboxQuanxuan.isChecked()){ if (listBean.selected == 0) { //// TODO: 2017/10/21 点击全部选中时,先加上之前未选中的价钱 然后改变状态 sumNum++; sumPrice = sumPrice + Double.parseDouble(listBean.price); listBean.selected=1; } }else { if (listBean.selected == 1) { //// TODO: 2017/10/21 点击全部取消选中时,先减去之前选中的价钱 然后改变状态 sumNum--; sumPrice = sumPrice - Double.parseDouble(listBean.price); listBean.selected = 0; } } } } tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice)); mJiesuanButton.setText("去结算("+sumNum+")"); shopadapter.notifyDataSetChanged(); } }
main.xml
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="1"> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp"> <TextView android:layout_centerInParent="true" android:text="购物车" android:layout_width="wrap_content" android:layout_height="wrap_content" /> RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/shopcar_recycle" android:layout_width="match_parent" android:layout_height="430dp"> android.support.v7.widget.RecyclerView> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/checkbox_quanxuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="全选"/> <TextView android:id="@+id/tv_sum" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:paddingRight="10dp" android:textColor="#F63A19" android:text="合计:¥0.00"/> <TextView android:background="#F63A19" android:id="@+id/jiesuan_button" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:gravity="center" android:padding="10dp" android:text="去结算"/> LinearLayout> LinearLayout>shopcar1.xml
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckBox android:id="@+id/ck_shophome" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_shophome" android:text="商家" android:layout_width="wrap_content" android:layout_height="wrap_content" /> LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/shop_li_recy" android:layout_width="match_parent" android:layout_height="wrap_content"> android.support.v7.widget.RecyclerView> LinearLayout>
3.shopcarli.xml
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#ffffff" android:layout_height="match_parent"> <CheckBox android:layout_gravity="center" android:id="@+id/ck_gt" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/imageView12" android:layout_width="70dp" android:layout_height="70dp" android:layout_gravity="center" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical"> <TextView android:id="@+id/tv_jianjie" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="克拉裸钻定制DIA双证书18K金钻石戒指女款克拉钻戒" android:textSize="13sp" /> <TextView android:id="@+id/tv_jianjie2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="啦啦啦啦啦啦啦啦" android:textSize="10dp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_shop_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥4500000.00" android:textColor="#ff0000" /> RelativeLayout> LinearLayout> LinearLayout>