------------Adapter-------------------------
package com.example.diynsg.adapter;
import android.content.Context;
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.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.diynsg.R;
import com.example.diynsg.bean.CardBean;
import com.example.diynsg.bean.MCEvent;
import com.example.diynsg.bean.MsgEvent;
import com.example.diynsg.widget.MyAddDelView;
import com.nostra13.universalimageloader.core.ImageLoader;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
/**
* Created by yz on 2017/10/23.
*/
public class ShopCarAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<CardBean.DatasBean.CartListBean.GoodsBean> goods;
private OnItemDelClick onItemDelClick;
public interface OnItemDelClick{
public void deleteItem(String position, int i);
}
public void setOnItemDelClick(OnItemDelClick onItemDelClick){
this.onItemDelClick=onItemDelClick;
}
public ShopCarAdapter(Context context, List<CardBean.DatasBean.CartListBean.GoodsBean> goods) {
this.context = context;
this.goods = goods;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.activity_shopcar_item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
final CardBean.DatasBean.CartListBean.GoodsBean goodsBean = goods.get(position);
final MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.tv_goodsName.setText(goods.get(position).getGoods_name());
myViewHolder.tv_price.setText(goods.get(position).getGoods_price());
ImageLoader.getInstance().displayImage(goods.get(position).getGoods_image_url(), myViewHolder.iv_watch);
myViewHolder.cb_add.setChecked(goods.get(position).isChecked());
myViewHolder.tv_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemDelClick.deleteItem(goods.get(position).getCart_id(),position);
}
});
//自定义加减器的点击监听事件
myViewHolder.adv.setOnItemClick(new MyAddDelView.OnItemClick() {
@Override
public void onItemAddClick(int count) {
if (goodsBean.isChecked()) {
String goods_price = goodsBean.getGoods_price();
float price = Float.parseFloat(goods_price);
MCEvent mcEvent = new MCEvent();
mcEvent.setMoney(price);
mcEvent.setCount(1);
EventBus.getDefault().post(mcEvent);
} else {
Toast.makeText(context, "请勾选", Toast.LENGTH_SHORT).show();
myViewHolder.adv.setCount();
}
}
@Override
public void onItemDelClick(int count) {
if (goodsBean.isChecked()){
String goods_price = goodsBean.getGoods_price();
float price = Float.parseFloat(goods_price);
MCEvent mcEvent = new MCEvent();
mcEvent.setMoney(-price);
mcEvent.setCount(-1);
EventBus.getDefault().post(mcEvent);
}else{
Toast.makeText(context, "请勾选", Toast.LENGTH_SHORT).show();
myViewHolder.adv.setCount();
}
}
});
/**
* 复选框的选中监听事件
*/
myViewHolder.cb_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//checkbox当选中状态
if (myViewHolder.cb_add.isChecked()) {
goodsBean.setChecked(true);
//把金额和数量传给fragment
MCEvent mcEvent = new MCEvent();
mcEvent.setMoney(Float.parseFloat(goodsBean.getGoods_price()));
mcEvent.setCount(1);
EventBus.getDefault().post(mcEvent);
//判断是否复选框全部勾选
if (isAllSelect()) {
MsgEvent msgEvent = new MsgEvent();
msgEvent.setChecked(true);
EventBus.getDefault().post(msgEvent);
}
} else {
//checkbox未选中状态
MCEvent mcEvent = new MCEvent();
mcEvent.setCount(-1);
mcEvent.setMoney(-Float.parseFloat(goodsBean.getGoods_price()));
EventBus.getDefault().post(mcEvent);
goodsBean.setChecked(false);
//全选框取消掉
MsgEvent msgEvent = new MsgEvent();
msgEvent.setChecked(false);
EventBus.getDefault().post(msgEvent);
}
}
});
}
/**
* 遍历集合看看复选框的选中状态
* @return
*/
public boolean isAllSelect() {
//遍历集合看看复选框的选中状态
for (CardBean.DatasBean.CartListBean.GoodsBean bean : goods) {
if (!bean.isChecked()) {
//表示未选中
return false;
}
}
//表示选中
return true;
}
@Override
public int getItemCount() {
return goods.size();
}
/**
* 定义一个方法去fragment那边的全选框操作和里面的复选框进行关联
*
* @param flag
*/
public void cbChecked(boolean flag) {
MCEvent mcEvent1 = new MCEvent();
mcEvent1.setFlag(true);
EventBus.getDefault().post(mcEvent1);
for (CardBean.DatasBean.CartListBean.GoodsBean bean : goods) {
if (flag) {
MCEvent mcEvent = new MCEvent();
mcEvent.setCount(1);
mcEvent.setMoney(Float.parseFloat(bean.getGoods_price()));
EventBus.getDefault().post(mcEvent);
} else {
MCEvent mcEvent = new MCEvent();
mcEvent.setMoney(-Float.parseFloat(bean.getGoods_price()));
mcEvent.setCount(-1);
EventBus.getDefault().post(mcEvent);
}
bean.setChecked(flag);
notifyDataSetChanged();
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
private final CheckBox cb_add;
private final ImageView iv_watch;
private final TextView tv_goodsName;
private final TextView tv_delete;
private final TextView tv_price;
private final MyAddDelView adv;
public MyViewHolder(View itemView) {
super(itemView);
cb_add = itemView.findViewById(R.id.cb_add);
iv_watch = itemView.findViewById(R.id.iv_watch);
tv_goodsName = itemView.findViewById(R.id.tv_goodsName);
tv_delete = itemView.findViewById(R.id.tv_delete);
tv_price = itemView.findViewById(R.id.tv_price);
adv = itemView.findViewById(R.id.adv);
}
}
}
-----------------主界面-------------------
public class Fragment_ShopCar extends Fragment {
private List<CardBean.DatasBean.CartListBean.GoodsBean> goods;
private RecyclerView rv;
private CheckBox cb_all;
private TextView tv_sumMoney;
private TextView tv_num;
private ShopCarAdapter adapter;
private float sum;
private int num;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_shopcar, container, false);
rv = view.findViewById(R.id.rv);
cb_all = view.findViewById(R.id.cb_all);
tv_sumMoney = view.findViewById(R.id.tv_sumMoney);
tv_num = view.findViewById(R.id.tv_num);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
getDate();
cb_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.cbChecked(cb_all.isChecked());
}
});
return view;
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void onMessageEvent(MsgEvent msg) {
cb_all.setChecked(msg.isChecked());
}
@Subscribe
public void onMCEvent(MCEvent mcEvent) {
if (mcEvent.isFlag()) {
sum = 0;
num = 0;
}
float money = mcEvent.getMoney();
int count = mcEvent.getCount();
sum += money;
num += count;
if (sum < 0||num<0) {
sum = 0;
num=0;
}
tv_sumMoney.setText(sum + "元");
tv_num.setText("付款" + num);
}
}
-------------MCEvent -----------------
package com.example.diynsg.bean;
/**
* Created by yz on 2017/10/23.
*/
public class MCEvent {
private float money;
private int count;
private boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
-------------MsgEvent--------------------
package com.example.diynsg.bean;
/**
* Created by yz on 2017/10/23.
*/
public class MsgEvent {
private boolean checked;
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}