2017-10-09 12 views
0

Xamarin.Androidでアイテム発注システムを開発しようとしています。アイテムリストを表示するために、私はすべての行にカートボタン付きのカスタムアダプタでlistViewを使用しました。どの技術を使うべきなのか、注文したすべてのアイテムをリストに入れてカートリストのアクティビティに送る方法を教えてください。 ここに私のitemListAdapterクラスがあります:注文アイテムをすべてXamarin.Androidのカートリストに保存するにはどうすればよいですか?

ありがとうございます!

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

答えて

0

あなたは、私が使用すべき技術私を提案してくださいすることができ、またはどのように私は意志が私のカートリストの活動になり、リスト内のすべての注文したアイテムを保存できますか?

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

そしてときにユーザーこのリストにOrderDetailを追加し、addToCart]ボタンをクリックしてください:

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

リストがすべきあなたのアダプタにCartLilst(List<OrderDetail>)を渡す必要が

アダプタの作成前にアクティビティで初期化して作成する:

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

更新:

あなたのカートリストは、アプリケーションで頻繁に使用されている場合は、私はあなたが私が言ったことを忘れて、アプリでカートのリストを格納するための単一パターンを使用することをお勧め:

  1. あなたのアプリで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; 
         } 
        } 
    } 
    
  2. 次にアプリでどこでもこのCartListを使用することができます(あなたがyにそれを渡す必要はありません私たちの新しい活動は、あなたが)あなたの新しい活動に直接それを得ることができます。

    var cartList=CartList.Instance; 
    
+0

こんにちはエルビス夏を!私の心から多くの多くのありがとう! 私はあなたの方法を適用しました。それは素晴らしい! 私の最後には2つの問題があります。 まず、タブ(カテゴリ)のフラグメントを使用しました。私のポストのリンクされた画像を見てください!だから、私はすべてのフラグメントクラスでcartListパラメータを渡さなければなりません。 問題は、新しいアイテムを注文するために新しいタブをクリックすると、カートのリストが空になることです。 ** 2番目の問題は次のとおりです。** cartList(orderDetails)を新しいアクティビティに渡すためにどの技術を使用すべきですか? あなたの貴重な返事を待っています! ありがとうございました! – Russell

+0

あなたの要件のための@Russell、私はCartListのためのシングルパターンを使用することをお勧めします、私の更新を確認してください。 –

関連する問題