package com.cheikh.lazywaimai.ui.adapter; import android.app.Activity; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; import com.cheikh.lazywaimai.R; import com.cheikh.lazywaimai.model.ShoppingCart; import com.cheikh.lazywaimai.model.bean.Product; import com.cheikh.lazywaimai.model.bean.ProductCategory; import com.cheikh.lazywaimai.util.CollectionUtil; import com.cheikh.lazywaimai.util.StringFetcher; import com.cheikh.lazywaimai.widget.PicassoImageView; import com.cheikh.lazywaimai.widget.ProperRatingBar; import com.cheikh.lazywaimai.widget.ShoppingCountView; import za.co.immedia.pinnedheaderlistview.SectionedBaseAdapter; public class ProductItemAdapter extends SectionedBaseAdapter { private LayoutInflater mInflater; private List<ProductCategory> mCategories; private View mAnimTargetView; public ProductItemAdapter(Activity activity) { mInflater = LayoutInflater.from(activity); } public void setAnimTargetView(View animTargetView) { mAnimTargetView = animTargetView; } public void setItems(List<ProductCategory> categories) { mCategories = categories; notifyDataSetChanged(); } @Override public int getCountForSection(int section) { if (mCategories != null) { List<Product> products = mCategories.get(section).getProducts(); if (!CollectionUtil.isEmpty(products)) { return products.size(); } } return 0; } @Override public int getSectionCount() { return mCategories != null ? mCategories.size() : 0; } @Override public Product getItem(int section, int position) { List<Product> products = mCategories.get(section).getProducts(); return products.get(position); } @Override public long getItemId(int section, int position) { return position; } @Override public View getItemView(int section, int position, View convertView, ViewGroup viewGroup) { final ItemViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.layout_product_item, null); holder = new ItemViewHolder(convertView); convertView.setTag(holder); } else { holder = (ItemViewHolder) convertView.getTag(); } Product product = getItem(section, position); holder.photoImg.loadProductPhoto(product); holder.nameTxt.setText(product.getName()); holder.priceTxt.setText(StringFetcher.getString(R.string.label_price, product.getPrice())); holder.monthSalesTxt.setText(StringFetcher.getString(R.string.label_month_sales, product.getMonthSales())); holder.rateRatingBar.setRating(product.getRate()); if (!TextUtils.isEmpty(product.getDescription())) { holder.descriptionTxt.setVisibility(View.VISIBLE); holder.descriptionTxt.setText(product.getDescription()); } else { holder.descriptionTxt.setVisibility(View.GONE); } if (product.getLeftNum() > 0) { final Product finalProduct = product; int quantity = ShoppingCart.getInstance().getQuantityForProduct(finalProduct); holder.shoppingCountView.setShoppingCount(quantity); holder.shoppingCountView.setAnimTargetView(mAnimTargetView); holder.shoppingCountView.setOnShoppingClickListener(new ShoppingCountView.ShoppingClickListener() { @Override public void onAddClick(int num) { if (!ShoppingCart.getInstance().push(finalProduct)) { // 添加失败则恢复数量 int oldQuantity = ShoppingCart.getInstance().getQuantityForProduct(finalProduct); holder.shoppingCountView.setShoppingCount(oldQuantity); showClearDialog(); } } @Override public void onMinusClick(int num) { if (!ShoppingCart.getInstance().pop(finalProduct)) { // 减少失败则恢复数量 int oldQuantity = ShoppingCart.getInstance().getQuantityForProduct(finalProduct); holder.shoppingCountView.setShoppingCount(oldQuantity); } } }); holder.shoppingCountView.setVisibility(View.VISIBLE); holder.leftNumTxt.setVisibility(View.GONE); } else { holder.leftNumTxt.setText(StringFetcher.getString(R.string.label_sold_out)); holder.leftNumTxt.setVisibility(View.VISIBLE); holder.shoppingCountView.setVisibility(View.GONE); } return convertView; } @Override public View getSectionHeaderView(int position, View convertView, ViewGroup viewGroup) { HeaderViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.layout_product_header, viewGroup, false); holder = new HeaderViewHolder(convertView); convertView.setTag(holder); } else { holder = (HeaderViewHolder) convertView.getTag(); } ProductCategory productCategory = mCategories.get(position); holder.titleTxt.setText(productCategory.getName()); if (!TextUtils.isEmpty(productCategory.getDescription())) { holder.descText.setText(productCategory.getDescription()); holder.descText.setVisibility(View.VISIBLE); } else { holder.descText.setVisibility(View.GONE); } return convertView; } //////////////////////////////////////////// /// view holder /// //////////////////////////////////////////// public static class HeaderViewHolder { TextView titleTxt; TextView descText; HeaderViewHolder(View headerView) { titleTxt = (TextView) headerView.findViewById(R.id.txt_title); descText = (TextView) headerView.findViewById(R.id.txt_desc); } } public static class ItemViewHolder { PicassoImageView photoImg; TextView nameTxt; TextView priceTxt; TextView descriptionTxt; TextView monthSalesTxt; ProperRatingBar rateRatingBar; TextView leftNumTxt; ShoppingCountView shoppingCountView; ItemViewHolder(View itemView) { photoImg = (PicassoImageView) itemView.findViewById(R.id.img_product_photo); nameTxt = (TextView) itemView.findViewById(R.id.txt_product_name); priceTxt = (TextView) itemView.findViewById(R.id.txt_product_price); descriptionTxt = (TextView) itemView.findViewById(R.id.txt_product_description); monthSalesTxt = (TextView) itemView.findViewById(R.id.txt_product_month_sales); rateRatingBar = (ProperRatingBar) itemView.findViewById(R.id.rating_product_rate); leftNumTxt = (TextView) itemView.findViewById(R.id.txt_product_left_num); shoppingCountView = (ShoppingCountView) itemView.findViewById(R.id.shopping_count_view); } } private void showClearDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(mInflater.getContext()); builder.setTitle(R.string.dialog_shopping_cart_business_conflict_title); builder.setMessage(R.string.dialog_shopping_cart_business_conflict_message); builder.setNegativeButton(R.string.dialog_cancel, null); builder.setPositiveButton(R.string.dialog_clear, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ShoppingCart.getInstance().clearAll(); } }); builder.create().show(); } }