购物车顺序 : 商品详情页加入购物车 , 然后设置购物车的页面内容
public class ShopCartFragment extends Fragment {
@BindView(R.id.recyclerView_shopCart)
RecyclerView recyclerViewShopCart;
@BindView(R.id.cb_select_all)
CheckBox cbSelectAll;
@BindView(R.id.tv_total_price)
TextView tvTotalPrice;
@BindView(R.id.tv_total_count)
TextView tvTotalCount;
private Unbinder unbinder;
private List<HomeshopsBean> homeshopsBeanList;//购物车展示的数据源集合
private List<HomeshopsBean> homeshopsBeanListSelected = new ArrayList<>();//被选中的商品数据源集合
private ShopCartAdapter adapter;
private Realm realm;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_shop_cart, container, false);
unbinder = ButterKnife.bind(this, view);
realm = Realm.getDefaultInstance();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
recyclerViewShopCart.setLayoutManager(new LinearLayoutManager(getActivity()));
//查询数据库购物车数据并展示
homeshopsBeanList = realm.where(HomeshopsBean.class).findAll();
adapter = new ShopCartAdapter(getActivity(), homeshopsBeanList);
recyclerViewShopCart.setAdapter(adapter);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
public void onDestroy() {
super.onDestroy();
if (!realm.isClosed()) {
realm.close();
}
}
/*全选*/
@OnClick(R.id.cb_select_all)
public void onViewClicked() {
realm.beginTransaction();//开启事务
boolean checked = cbSelectAll.isChecked();
for (int i = 0; i < homeshopsBeanList.size(); i++) {
homeshopsBeanList.get(i).setSelected(checked);
}
//计算总价和总量
calcTotal();
realm.commitTransaction();//提交事务
}
/**
* 存储总价的变量
*/
private int totalPrice;
/**
* 存储选中商品总数量
*/
private int totalCount;
/**
* 标识商品是否是全选的变量
*/
private boolean isSelectAll;
private void calcTotal() {
totalPrice = 0;//重置商品总价
totalCount = 0;//重置商品总量
isSelectAll = true;//重置全选按钮的状态
for (int i = 0; i < homeshopsBeanList.size(); i++) {
if (homeshopsBeanList.get(i).isSelected()) {
// 累计价格
totalPrice += homeshopsBeanList.get(i).getNowprice();
// 累计数量
totalCount += 1;
} else {
isSelectAll = false;//如果有一件没选中全选就是false
}
}
// 刷新适配器
adapter.notifyDataSetChanged();
// 设置总价
tvTotalPrice.setText("总价:¥" + totalPrice);
// 设置总数量
tvTotalCount.setText("共计" + totalCount + "件商品");
// 修改页面
cbSelectAll.setChecked(isSelectAll);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getEvent(MessageBean messageBean) {
//收到计算总价和总量的事件
if ("计算总量和总价".equals(messageBean.getMessage())) {
calcTotal();
}
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
/*立即结算购买*/
@OnClick(R.id.buy)
public void buy() {
homeshopsBeanListSelected.clear();//清空一下上次的数据
for (int i = 0; i < homeshopsBeanList.size(); i++) {
if (homeshopsBeanList.get(i).isSelected()) {//用户选中的商品
homeshopsBeanListSelected.add(homeshopsBeanList.get(i));
}
}
EventBus.getDefault().postSticky(homeshopsBeanListSelected);
//跳转到确认订单页面
Intent intent = new Intent(getActivity(), ConfirmOrderActivity.class);
startActivity(intent);
}
}
适配器
public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartAdapter.ViewHolder> {
private Context context;
private List<HomeshopsBean> homeshopBeans;//数据源集合
private Realm realm;
public ShopCartAdapter(Context context, List<HomeshopsBean> homeshopBeans) {
this.context = context;
this.homeshopBeans = homeshopBeans;
realm = Realm.getDefaultInstance();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.shop_cart_item, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
HomeshopsBean homeshopsBean = homeshopBeans.get(position);
//设置数据
holder.username.setText(homeshopsBean.getUser().getUsername());
holder.bookname.setText(homeshopsBean.getBookname());
holder.appearance.setText(homeshopsBean.getAppearance());
holder.location.setText(homeshopsBean.getLocation());
holder.nowprice.setText("¥"+homeshopsBean.getNowprice());
//使用的是Glide加载(要使用自己的网络请求框架+二次采样)
String[] images = homeshopsBean.getImages().split(",");
//Glide.with(context).load(images[0]).into(holder.bookImage);
ImageUtils.getImageUtils().loadImage(images[0],holder.bookImage);
//同步状态
holder.checkBoxUsername.setChecked(homeshopsBean.isSelected());
holder.checkboxBook.setChecked(homeshopsBean.isSelected());
holder.checkBoxUsername.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
realm.beginTransaction();//开启事务
boolean checked = holder.checkBoxUsername.isChecked();
homeshopsBean.setSelected(checked);
holder.checkboxBook.setChecked(checked);
// 发送计算价格的事件
EventBus.getDefault().post(new MessageBean("计算总量和总价"));
realm.commitTransaction();//提交事务
}
});
holder.checkboxBook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
realm.beginTransaction();
boolean checked = holder.checkboxBook.isChecked();
homeshopsBean.setSelected(checked);
holder.checkBoxUsername.setChecked(checked);
// 发送计算价格的事件
EventBus.getDefault().post(new MessageBean("计算总量和总价"));
realm.commitTransaction();
}
});
}
@Override
public int getItemCount() {
return homeshopBeans.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.checkBox_username)
CheckBox checkBoxUsername;
@BindView(R.id.username)
TextView username;
@BindView(R.id.checkbox_book)
CheckBox checkboxBook;
@BindView(R.id.bookImage)
ImageView bookImage;
@BindView(R.id.bookname)
TextView bookname;
@BindView(R.id.appearance)
TextView appearance;
@BindView(R.id.location)
TextView location;
@BindView(R.id.nowprice)
TextView nowprice;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
确认订单
public class ConfirmOrderActivity extends AppCompatActivity {
@BindView(R.id.recyclerView_confirmOrder)
RecyclerView recyclerViewConfirmOrder;
@BindView(R.id.totalPrice)
TextView tv_totalPrice;//商品总价显示的TextView
private int totalPrice;
private Unbinder unbinder;
private List<HomeshopsBean> beans;
private ConfirmOrderAdapter confirmOrderAdapter;//确认订单的适配器
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_confirm_order);
unbinder = ButterKnife.bind(this);
realm = Realm.getDefaultInstance();
//设置布局管理器
recyclerViewConfirmOrder.setLayoutManager(new LinearLayoutManager(this));
}
@OnClick(R.id.confirmOrder)
public void onViewClicked() {
//确认下单
//数据存入订单的数据库
realm.beginTransaction();
RealmList<HomeshopsBean> realmList = new RealmList<>();
for (int i = 0; i < beans.size(); i++) {
realmList.add(beans.get(i));
}
HomeBean homeBean = new HomeBean();
homeBean.setHomeshops(realmList);
//添加到数据库
realm.copyToRealm(homeBean);
realm.commitTransaction();
//当前页面关闭
finish();
}
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
public void receive(List<HomeshopsBean> beans){
this.beans = beans;
//创建确认订单适配器
confirmOrderAdapter = new ConfirmOrderAdapter(this,beans);
//设置适配器
recyclerViewConfirmOrder.setAdapter(confirmOrderAdapter);
for (int i = 0; i < beans.size(); i++) {
totalPrice += beans.get(i).getNowprice();//计算总价
}
//设置显示总价
tv_totalPrice.setText("共计¥:"+totalPrice);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbinder.unbind();
}
}
商品详情
public class DetailActivity extends AppCompatActivity {
@BindView(R.id.image)
SimpleDraweeView image;
@BindView(R.id.bookname)
TextView bookname;
@BindView(R.id.appearance)
TextView appearance;
@BindView(R.id.location)
TextView location;
@BindView(R.id.shopinfo)
TextView shopinfo;
private Unbinder unbinder;
private HomeshopsBean homeshopBean;
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
unbinder = ButterKnife.bind(this);
//获取数据库的实例
realm = Realm.getDefaultInstance();
}
@OnClick(R.id.shopCart)
public void onViewClicked() {
//点击添加商品到购物车,实际上就是添加到数据库
realm.beginTransaction();//开启事务
realm.copyToRealm(homeshopBean);//向数据库中添加(不会更新数据)
realm.commitTransaction();//提交事务
Toast.makeText(this, "添加成功!", Toast.LENGTH_SHORT).show();
}
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void receive(HomeshopsBean homeshopBean) {
this.homeshopBean = homeshopBean;
bookname.setText(homeshopBean.getBookname());
appearance.setText(homeshopBean.getAppearance());
location.setText(homeshopBean.getLocation());
String[] images = homeshopBean.getImages().split(",");
image.setImageURI(images[0]);
shopinfo.setText(homeshopBean.getShopinfo());
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbinder.unbind();
}
}