如何将每个订购商品存储在Xamarin.Android的购物车列表中?
问题描述:
试图在Xamarin.Android中开发一个物品订购系统。为了显示项目列表,我在每一行都使用了带有自定义适配器的“购物车”按钮。您能否建议我使用哪种技术,或者如何将每个订购商品存储在列表中,这些列表将进入我的购物车列表活动? 这里是我的itemListAdapter类:如何将每个订购商品存储在Xamarin.Android的购物车列表中?
谢谢!
namespace Test.Restaurant.Android.Adapters
{
public class ItemListAdapter : BaseAdapter
{
List mItems;
Activity context;
private OrderDetail _OrderDetails;
private List _OrderDetailsList;
public ItemListAdapter(Activity context, List<Item> items) : base()
{
this.context = context;
this.mItems = items;
}
public override long GetItemId(int position)
{
return position;
}
public override Item this[int position]
{
get { return mItems[position]; }
}
public override int Count
{
get { return mItems.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView ?? context.LayoutInflater.Inflate(Resource.Layout.ItemRowView, parent, false);
var viewHolder = view.Tag as ItemHolder;
var item = mItems[position];
Bitmap myImage = ImageHelper.Bytes2Bimap(item.Image);
// 03. List With Custom Row View
if (viewHolder == null)
{
viewHolder = new ItemHolder
{
itemNameTextView = view.FindViewById<TextView>(Resource.Id.itemNameTextView),
descriptionTextView = view.FindViewById<TextView>(Resource.Id.descriptionTextView),
itemImageView = view.FindViewById<ImageView>(Resource.Id.itemImageView),
priceTextView = view.FindViewById<TextView>(Resource.Id.priceTextView),
btnPlus = view.FindViewById<ImageView>(Resource.Id.btnPlus),
btnMinus = view.FindViewById<ImageView>(Resource.Id.btnMinus),
btnAddtoCart = view.FindViewById<ImageView>(Resource.Id.btnAddToCart),
txtQty = view.FindViewById<TextView>(Resource.Id.cart_product_quantity)
};
view.Tag = viewHolder;
}
else
{
viewHolder = view.Tag as ItemHolder;
}
viewHolder.itemNameTextView.Text = item.ItemName;
viewHolder.descriptionTextView.Text = item.ItemDescription;
viewHolder.priceTextView.Text = "$ " + 30;
viewHolder.itemImageView.SetImageBitmap(myImage);
if (!viewHolder.btnAddtoCart.HasOnClickListeners)
{
viewHolder.btnAddtoCart.Click += (sender, args) =>
{
_OrderDetails = new OrderDetail();
_OrderDetails.ItemId = item.ItemId;
_OrderDetails.Quantity = int.Parse(viewHolder.txtQty.Text);
_OrderDetails.UnitPriceInclTax = 0;
_OrderDetails.UnitPriceExclTax = 0;
_OrderDetails.DiscountAmountInclTax = 0;
_OrderDetails.DiscountAmountExclTax = 0;
_OrderDetails.PriceInclTax = 100;
_OrderDetails.PriceExclTax = 0;
** //What should I Do Here???**
**************************
**************************
};
}
return view;
}
private class ItemHolder : Java.Lang.Object
{
public TextView itemNameTextView { get; set; }
public TextView descriptionTextView { get; set; }
public TextView txtQty { get; set; }
public ImageView itemImageView { get; set; }
public ImageView btnPlus { get; set; }
public ImageView btnMinus { get; set; }
public ImageView btnAddtoCart { get; set; }
}
}
}
答
能否请你给我建议,我应该使用哪种技术或我怎么能存储在其中会去我的车列表活动列表中的每个订购的商品?
你需要一个CartLilst(List<OrderDetail>
)传递给你的适配器:
public class ItemListAdapter : BaseAdapter
{
...
List<OrderDetail> cartList;
public ItemListAdapter(Activity context, List<Item> items, List<OrderDetail> cartList)
{
this.context = context;
this.mItems = items;
_cartlist = cartList;
}
...
}
而当用户点击addToCart按钮时,的OrderDetail添加到这个列表:
viewHolder.btnAddtoCart.Click += (sender, args) =>
{
_OrderDetails = new OrderDetail();
_OrderDetails.ItemId = item.ItemId;
_OrderDetails.Quantity = int.Parse(viewHolder.txtQty.Text);
_OrderDetails.UnitPriceInclTax = 0;
_OrderDetails.UnitPriceExclTax = 0;
_OrderDetails.DiscountAmountInclTax = 0;
_OrderDetails.DiscountAmountExclTax = 0;
_OrderDetails.PriceInclTax = 100;
_OrderDetails.PriceExclTax = 0;
//add _OrderDetail to cartList
cartList.Add(_OrderDetails);
};
清单应在适配器创建之前在您的Activity中进行初始化和创建:
List<OrderDetail> cartList=new List<OrderDetail>();
ItemListAdapter adapter=new ItemListAdapter(this,items,cartList);
更新:
如果使用您的购物车清单经常在你的应用程序,那么我建议你忘了我说的话,用一个模式来存储您的应用内购物车清单:
-
在您的应用程序创建一个
CartList.cs
:public class CartList { private static List<OrderDetail> _cartList; public static List<OrderDetail> Instance { get { if (_cartList == null) { _cartList = new List<OrderDetail>(); } return _cartList; } set { _cartList = value; } } }
-
然后你就可以在你的应用程序在任何地方使用这个CartList(你不需要将它传递到y我们的新的活动,你可以在你的新的活动直接得到它):
var cartList=CartList.Instance;
你好猫王夏!很多很多来自我心中的感谢! 我应用了你的方式。这很棒! 但我的结尾有两个问题。 首先,我使用Tab(Category)的片段。请在我的文章中看到链接的图片!所以,我必须在每个片段类中传递cartList参数。 问题是当我点击新标签订购新商品时,购物车列表变为空白。 **第二个问题是:**我应该使用哪种技术将我的cartList(orderDetails)传递给新的Activity。 等待您的宝贵回复! 再次感谢! – Russell
@Russell您的要求,我建议您使用CartList的单一模式,请检查我的更新。 –