2017-10-09 8 views
0

Essayer de développer un système de commande d'articles dans Xamarin.Android. Pour afficher la liste des éléments, j'ai utilisé un listView avec adaptateur personnalisé avec le bouton Cart dans chaque ligne. Pouvez-vous me suggérer la technologie que je devrais utiliser ou comment puis-je stocker chaque article commandé dans une liste qui ira à l'activité de ma liste de panier? Voici mon articleListeAdapter class:Comment puis-je stocker chaque article commandé dans une liste de panier dans Xamarin.Android?

Merci!

My ItemList Image

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; } 
    } 
} 
} 

Répondre

0

Pouvez-vous s'il vous plaît me suggérer que la technologie que je devrais utiliser ou comment puis-je stocker tous les articles commandés dans une liste qui va à mon panier activité de la liste?

Vous devez passer un CartLilst (List<OrderDetail>) à votre adaptateur:

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; 
    } 
    ... 
} 

Et lorsque le bouton cliquez addToCart utilisateur, ajoutez le OrderDetail à cette liste:

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); 
}; 

La liste devrait être initialisé et créé dans votre activité avant la création de l'adaptateur:

List<OrderDetail> cartList=new List<OrderDetail>(); 
ItemListAdapter adapter=new ItemListAdapter(this,items,cartList); 

Mise à jour:

Si votre liste de panier est utilisé assez souvent dans votre application, alors je suggère que vous oubliez ce que je disais et utiliser un modèle unique pour stocker la liste de panier dans votre application:

  1. Créer un CartList.cs dans votre application:

    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; 
         } 
        } 
    } 
    
  2. Ensuite, vous pouvez utiliser cette CartList partout dans votre application (vous n'êtes pas obligé de le transmettre à y notre nouvelle activité, vous pouvez l'obtenir directement dans votre nouvelle activité):

    var cartList=CartList.Instance; 
    
+0

Bonjour Elvis Xia! Beaucoup de mercis de mon coeur! J'ai appliqué votre chemin. C'est bien! Mais il y a deux problèmes dans ma fin. Tout d'abord, j'ai utilisé fragment pour Tab (Category). S'il vous plaît voir l'image liée dans mon message! Donc, je dois passer le paramètre cartList dans la classe Every Fragment. Le problème est lorsque je clique sur un nouvel onglet pour commander un nouvel article, la liste de panier devient vide. ** Le deuxième problème est: ** Quelle technologie devrais-je utiliser pour passer ma cartList (orderDetails) à la nouvelle activité. En attente de votre précieuse réponse! Merci encore! – Russell

+0

@Russell pour votre condition, je vous suggère d'utiliser Single Pattern pour CartList, s'il vous plaît vérifier ma mise à jour. –