recycle實現購物車
阿新 • • 發佈:2018-12-21
main:
public class MainActivity extends AppCompatActivity implements DataCall<List<Shop>> { private TextView mSumPrice; private TextView mCount; private RecyclerView mLeftRecycler,mRightRecycler; private LeftAdapter mLeftAdapter; private RightAdapter mRightAdapter; private CartPresenter cartPresenter = new CartPresenter(this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSumPrice = findViewById(R.id.goods_sum_price); mCount = findViewById(R.id.goods_number); mLeftRecycler = findViewById(R.id.left_recycler); mRightRecycler = findViewById(R.id.right_recycler); mLeftRecycler.setLayoutManager(new LinearLayoutManager(this)); mRightRecycler.setLayoutManager(new LinearLayoutManager(this)); mLeftAdapter = new LeftAdapter(); mLeftAdapter.setOnItemClickListenter(new LeftAdapter.OnItemClickListenter() { @Override public void onItemClick(Shop shop) { mRightAdapter.clearList();//清空資料 mRightAdapter.addAll(shop.getList()); mRightAdapter.notifyDataSetChanged(); } }); mLeftRecycler.setAdapter(mLeftAdapter); mRightAdapter = new RightAdapter(); mRightAdapter.setOnNumListener(new RightAdapter.OnNumListener() { @Override public void onNum() { calculatePrice(mLeftAdapter.getList()); } }); mRightRecycler.setAdapter(mRightAdapter); cartPresenter.requestData(); } @Override public void success(List<Shop> data) { calculatePrice(data);//計算價格和數量 mLeftAdapter.addAll(data);//左邊的新增型別 //得到預設選中的shop,設定上顏色和背景 Shop shop = data.get(1); shop.setTextColor(0xff000000); shop.setBackground(R.color.white); mRightAdapter.addAll(shop.getList()); mLeftAdapter.notifyDataSetChanged(); mRightAdapter.notifyDataSetChanged(); } @Override public void fail(Result result) { Toast.makeText(this, result.getCode() + " " + result.getMsg(), Toast.LENGTH_LONG).show(); } /** * @author dingtao * @date 2018/12/18 7:01 PM * 計算總價格 */ private void calculatePrice(List<Shop> shopList){ double totalPrice=0; int totalNum = 0; for (int i = 0; i < shopList.size(); i++) {//迴圈的商家 Shop shop = shopList.get(i); for (int j = 0; j < shop.getList().size(); j++) { Goods goods = shop.getList().get(j); //計算價格 totalPrice = totalPrice + goods.getNum() * goods.getPrice(); totalNum+=goods.getNum();//計數 } } mSumPrice.setText("價格:"+totalPrice); mCount.setText(""+totalNum); } }
LeftAdapter:
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.MyHolder> { private List<Shop> mList = new ArrayList<>(); public void addAll(List<Shop> list){ mList.addAll(list); } @NonNull @Override public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = View.inflate(viewGroup.getContext(), R.layout.recycler_left_item,null); MyHolder myHolder = new MyHolder(view); return myHolder; } @Override public void onBindViewHolder(@NonNull final MyHolder myHolder, int i) { final Shop shop = mList.get(i); myHolder.text.setText(shop.getSellerName()); myHolder.text.setBackgroundResource(shop.getBackground()); myHolder.text.setTextColor(shop.getTextColor()); myHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for (int j = 0; j <mList.size() ; j++) { mList.get(j).setTextColor(0xffffffff); mList.get(j).setBackground(R.color.grayblack); } shop.setBackground(R.color.white); shop.setTextColor(0xff000000); notifyDataSetChanged(); onItemClickListenter.onItemClick(shop);//切換右邊的列表 } }); } @Override public int getItemCount() { return mList.size(); } public List<Shop> getList() { return mList; } class MyHolder extends RecyclerView.ViewHolder{ TextView text; public MyHolder(@NonNull View itemView) { super(itemView); text = itemView.findViewById(R.id.left_text); } } private OnItemClickListenter onItemClickListenter; public void setOnItemClickListenter(OnItemClickListenter onItemClickListenter) { this.onItemClickListenter = onItemClickListenter; } public interface OnItemClickListenter{ void onItemClick(Shop shop); } }
RightAdapter:
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ChildHolder> { private List<Goods> mList = new ArrayList<>(); public void addAll(List<Goods> list) { mList.addAll(list); } @NonNull @Override public ChildHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { View view = View.inflate(viewGroup.getContext(), R.layout.recycler_right_item, null); ChildHolder myHolder = new ChildHolder(view); return myHolder; } @Override public void onBindViewHolder(@NonNull ChildHolder childHolder, int position) { final Goods goods = mList.get(position); childHolder.text.setText(goods.getTitle()); childHolder.price.setText("單價:" + goods.getPrice());//單價 String imageurl = "https" + goods.getImages().split("https")[1]; Log.i("dt", "imageUrl: " + imageurl); imageurl = imageurl.substring(0, imageurl.lastIndexOf(".jpg") + ".jpg".length()); Glide.with(MApp.getInstance()).load(imageurl).into(childHolder.image);//載入圖片 childHolder.addSub.setCount(goods.getNum());//設定商品數量 childHolder.addSub.setAddSubListener(new AddSubLayout.AddSubListener() { @Override public void addSub(int count) { goods.setNum(count); onNumListener.onNum();//計算價格 } }); } @Override public int getItemCount() { return mList.size(); } public void clearList() { mList.clear(); } class ChildHolder extends RecyclerView.ViewHolder { TextView text; TextView price; ImageView image; AddSubLayout addSub; public ChildHolder(@NonNull View itemView) { super(itemView); text = itemView.findViewById(R.id.text); price = itemView.findViewById(R.id.text_price); image = itemView.findViewById(R.id.image); addSub = itemView.findViewById(R.id.add_sub_layout); } } private OnNumListener onNumListener; public void setOnNumListener(OnNumListener onNumListener) { this.onNumListener = onNumListener; } public interface OnNumListener{ void onNum(); } }
加減自定義view:
public class AddSubLayout extends LinearLayout implements View.OnClickListener {
private TextView mAddBtn,mSubBtn;
private TextView mNumText;
private AddSubListener addSubListener;
public AddSubLayout(Context context) {
super(context);
initView();
}
public AddSubLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AddSubLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView(){
//載入layout佈局,第三個引數ViewGroup一定寫成this
View view = View.inflate(getContext(),R.layout.car_add_sub_layout,this);
mAddBtn = view.findViewById(R.id.btn_add);
mSubBtn = view.findViewById(R.id.btn_sub);
mNumText = view.findViewById(R.id.text_number);
mAddBtn.setOnClickListener(this);
mSubBtn.setOnClickListener(this);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
int width = r-l;//getWidth();
int height = b-t;//getHeight();
}
@Override
public void onClick(View v) {
int number = Integer.parseInt(mNumText.getText().toString());
switch (v.getId()){
case R.id.btn_add:
number++;
mNumText.setText(number+"");
break;
case R.id.btn_sub:
if (number==0){
Toast.makeText(getContext(),"數量不能小於0",Toast.LENGTH_LONG).show();
return;
}
number--;
mNumText.setText(number+"");
break;
}
if (addSubListener!=null){
addSubListener.addSub(number);
}
}
public void setCount(int count) {
mNumText.setText(count+"");
}
public void setAddSubListener(AddSubListener addSubListener) {
this.addSubListener = addSubListener;
}
public interface AddSubListener{
void addSub(int count);
}
}