购物车
这里博主使用的是MVP+万能适配器
话不多说,直接代码
实体类
private int ret;
private List<DataBean> data;
public int getRet() {
return ret;
}
public void setRet(int ret) {
this.ret = ret;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
//这个用来计算选中的数量
private int selectNum = 0;
//判断是否选中
private boolean isClick;
public int getSelectNum() {
return selectNum;
}
public void setSelectNum(int selectNum) {
this.selectNum = selectNum;
}
public boolean isClick() {
return isClick;
}
public void setClick(boolean click) {
isClick = click;
}
private String id;
private String title;
private String pic;
private String collect_num;
private String food_str;
private int num;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getCollect_num() {
return collect_num;
}
public void setCollect_num(String collect_num) {
this.collect_num = collect_num;
}
public String getFood_str() {
return food_str;
}
public void setFood_str(String food_str) {
this.food_str = food_str;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "DataBean{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", pic='" + pic + '\'' +
", collect_num='" + collect_num + '\'' +
", food_str='" + food_str + '\'' +
", num=" + num +
'}';
}
}
@Override
public String toString() {
return "FoodEntity{" +
"ret=" + ret +
", data=" + data +
'}';
}
万能适配器
public class ShopCarAdapter extends BaseQuickAdapter<FoodEntity.DataBean, BaseViewHolder> {
public ShopCarAdapter(int layoutResId, @Nullable List<FoodEntity.DataBean> data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, FoodEntity.DataBean item) {
//设置数据
helper.setText(R.id.item_car_title,item.getTitle()+"");
helper.setText(R.id.item_car_price,item.getNum()+"");
helper.setText(R.id.item_car_num,item.getSelectNum()+"");
GlideUtils.getInstance().CommonGlide(mContext,item.getPic(),helper.getView(R.id.item_car_iv));
//添加点击事件
helper.addOnClickListener(R.id.item_car_btn_add);
helper.addOnClickListener(R.id.item_car_btn_delete);
helper.addOnClickListener(R.id.item_car_btn_subtract);
helper.addOnClickListener(R.id.item_car_cb_check);
//设置是否选中
boolean isClick = item.isClick();
CheckBox checkBox = helper.getView(R.id.item_car_cb_check);
if(isClick) {
checkBox.setChecked(true);
} else {
checkBox.setChecked(false);
}
}
}
子布局文件
<CheckBox
android:layout_marginLeft="5dp"
android:id="@+id/item_car_cb_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></CheckBox>
<ImageView
android:layout_marginLeft="10dp"
android:src="@drawable/ic_launcher_background"
android:id="@+id/item_car_iv"
android:layout_width="60dp"
android:layout_height="60dp"></ImageView>
<LinearLayout
android:layout_marginLeft="10dp"
android:orientation="vertical"
android:layout_weight="4"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_car_title"
android:text="hahah"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<LinearLayout
android:gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/item_car_btn_subtract"
android:src="@drawable/subtract"
android:layout_width="25dp"
android:layout_height="25dp">
</ImageView>
<TextView
android:id="@+id/item_car_num"
android:text="0"
android:textSize="18dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<ImageView
android:id="@+id/item_car_btn_add"
android:src="@drawable/add"
android:layout_width="25dp"
android:layout_height="25dp">
</ImageView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="10dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_car_price"
android:text="hahah"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<ImageView
android:id="@+id/item_car_btn_delete"
android:src="@drawable/del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ImageView>
</LinearLayout>
这是主页面
public class FavoriteFragment extends BaseFragment<FoodPresenter> implements FoodContract.View {
@BindView(R.id.fra_favoriter_rv)
RecyclerView fraFavoriterRv;
@BindView(R.id.fra_favoriter_checkAll)
CheckBox fraFavoriterCheckAll;
@BindView(R.id.fra_favoriter_btn_clear)
Button fraFavoriterBtnClear;
@BindView(R.id.fra_favoriter_tv_allMoney)
TextView fraFavoriterTvAllMoney;
private ShopCarAdapter shopCarAdapter;
private List<FoodEntity.DataBean> list_food = new ArrayList<>();
//用来计算总价
private float allMoney = 0.0f;
@Override
public int bindLayout() {
return R.layout.fragment_favoriter;
}
@Override
public void initView() {
EventBus.getDefault().register(this);
//设置布局样式
fraFavoriterRv.setLayoutManager(new LinearLayoutManager(getActivity()));
//添加分割线
fraFavoriterRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
//设置删除动画
DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
defaultItemAnimator.setRemoveDuration(1000);
fraFavoriterRv.setItemAnimator(defaultItemAnimator);
//设置侧滑删除和上下交换
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
//允许拖动的方向
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.RIGHT);
}
//上下拖动
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
int adapterPosition = viewHolder.getAdapterPosition();
int adapterPosition1 = target.getAdapterPosition();
//利用提供的排序进行交换
Collections.swap(list_food,adapterPosition,adapterPosition1);
//刷新适配器,注意要刷新指定交换位置
shopCarAdapter.notifyItemMoved(adapterPosition,adapterPosition1);
return true;
}
//侧滑删除
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int adapterPosition = viewHolder.getAdapterPosition();
list_food.remove(adapterPosition);
//刷新适配器,只刷新删除位置
shopCarAdapter.notifyItemRemoved(adapterPosition);
}
});
//绑定对应recyclerView
itemTouchHelper.attachToRecyclerView(fraFavoriterRv);
}
@Override
public void initInject() {
DaggerFoodCompontent.builder().foodModules(new FoodModules(this, new FoodModel())).build().injectMainActivity(this);
}
@Override
public void initData() {
if (mPresenter != null) {
mPresenter.selectData(1, 20, 1);
} else {
LogUtils.log_i("mPresenter" + mPresenter);
}
}
@Override
public void initAdapter(List<FoodEntity.DataBean> dataBeans) {
//定义一个全局的集合,用于下面的计算
list_food.addAll(dataBeans);
//初始化适配器
if (shopCarAdapter == null) {
shopCarAdapter = new ShopCarAdapter(R.layout.item_car_layout, list_food);
fraFavoriterRv.setAdapter(shopCarAdapter);
initShopCar();
}
}
private void initShopCar() {
shopCarAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
int id = view.getId();
switch (id) {
case R.id.item_car_btn_add:
int selectNum = list_food.get(position).getSelectNum();
selectNum++;
LogUtils.log_i(selectNum+"");
list_food.get(position).setSelectNum(selectNum);
shopCarAdapter.notifyDataSetChanged();
break;
case R.id.item_car_btn_subtract:
int num = list_food.get(position).getSelectNum();
if(num > 0) {
num--;
list_food.get(position).setSelectNum(num);
shopCarAdapter.notifyDataSetChanged();
}
break;
case R.id.item_car_btn_delete:
list_food.remove(position);
shopCarAdapter.notifyItemRemoved(position);
break;
case R.id.item_car_cb_check:
boolean click = list_food.get(position).isClick();
list_food.get(position).setClick(!click);
break;
}
computeMoney();
}
});
}
//计算价格
private void computeMoney() {
//防止重复累加
allMoney = 0.0f;
//利用循环遍历,判断是否有选中的,然后计算价格,进行累加
for (FoodEntity.DataBean dataBean : list_food) {
boolean click = dataBean.isClick();
if(click) {
//用这个类型来代替价格
float price = dataBean.getNum();
int selectNum = dataBean.getSelectNum();
float singlePrice = price * selectNum;
//累加总价
allMoney+=singlePrice;
}
}
fraFavoriterTvAllMoney.setText(allMoney+"");
}
@OnClick({R.id.fra_favoriter_checkAll, R.id.fra_favoriter_btn_clear})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.fra_favoriter_checkAll:
//全选
for (FoodEntity.DataBean dataBean : list_food) {
dataBean.setClick(!dataBean.isClick());
}
computeMoney();
shopCarAdapter.notifyDataSetChanged();
break;
case R.id.fra_favoriter_btn_clear:
break;
}
}
}