RecyclerView检查CheckBox并存储在数据库中

时间:2016-08-30 22:13:53

标签: c# android mysql xamarin android-cardview

你好,有人可以帮助我,我正在学校做一个Xamarin android应用程序作为一个项目,但我怀疑有一个复选框和RecyclerView,会发生的是它假设用户可以选择一个或多个项目RecyclerView和推送btnagregar的poton在mysql数据库中将具有Checked属性的所有项目名称保存为true

MenuItemA.cs

RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecycleAdapter  mAdapter;
List<ItemAli> alilist;
protected override void OnCreate(Bundle bundle)
{
    base.OnCreate (bundle);
    new I18N.West.CP1250();
    new I18N.CJK.CP50220();
    int idC = Convert.ToInt32(Intent.GetStringExtra("idc") ?? "Data not available");


    SetContentView(Resource.Layout.RecyclerItem);

    alilist = new List<ItemAli>();
    try
    {

        string connsqlstring = "";


        MySqlConnection sqlconn = new MySqlConnection(connsqlstring);


        sqlconn.Open();


        DataSet ds = new DataSet();
        string queryString = "SELECT `IdAli`, `NombreA`, `Precio`, `Imagen`, `Tiempo` FROM `alimentos` as Item WHERE `IdCategoria` = " + idC;
        MySqlDataAdapter adapter = new MySqlDataAdapter(queryString, sqlconn);
        adapter.Fill(ds, "Item");
        foreach (DataRow row in ds.Tables["Item"].Rows)
        {
            alilist.Add(new ItemAli { AliID = (row[0]).ToString(), Name = row[1].ToString(), Quantity = 0, Price = Convert.ToDecimal(row[2]), ImageId = row[3].ToString(), Time = row[4].ToString(), AddToOrder = false});
        }

        sqlconn.Close();

    }
    catch 
    {
        Toast.MakeText(this, "La categoria esta vacia", ToastLength.Short).Show();
    }



    Button btnagregar = FindViewById<Button>(Resource.Id.btanadir);


    mRecyclerView = FindViewById<RecyclerView>(Resource.Id.rvitem);


    mLayoutManager = new LinearLayoutManager(this);


    mRecyclerView.SetLayoutManager(mLayoutManager);

    mAdapter = new RecycleAdapter(this,alilist);


    mAdapter.ItemClick += OnItemClick;
    mAdapter.SpinnerItemSelectionChanged += SpinnerItemSelectionChangedEvent;

    mRecyclerView.SetAdapter(mAdapter);

    btnagregar.Click += delegate
    {


    };



}


void OnItemClick(object sender, string IdAlimento)
{
    var a = new Intent(this, typeof(ActividadDetAli));
    a.PutExtra("idA", IdAlimento);
    StartActivity(a);
}

void SpinnerItemSelectionChangedEvent(object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    var itemPosition = Convert.ToInt32 (spinner.Tag);
    var currentquantity = alilist[itemPosition].Quantity;
    var selectedQuantity = Convert.ToInt32( spinner.GetItemAtPosition (e.Position).ToString());
    if (currentquantity != selectedQuantity) {
        alilist [itemPosition].Quantity = selectedQuantity;
        mAdapter.NotifyItemChanged (itemPosition);
    }

}

}

RecycleAdapter.cs

public class VegeViewHolder: RecyclerView.ViewHolder
{
    public ImageView Image { get; set; }
    public TextView Name { get; set; }
    public Spinner Quantity { get; set; }
    public TextView Price { get; set; }
    public TextView TotalAmount { get; set; }
    public CheckBox cbx { get; set; }
    public string idA { get; set; }

    public VegeViewHolder(View itemView, Action<string> itemlistner, Action<object,AdapterView.ItemSelectedEventArgs> spinnerItemSelected )
        :base(itemView)
    {
        Image = itemView.FindViewById<ImageView> (Resource.Id.list_image);
        Name = itemView.FindViewById<TextView> (Resource.Id.Name);
        Price = itemView.FindViewById<TextView> (Resource.Id.Price);
        Quantity = itemView.FindViewById<Spinner> (Resource.Id.spinner1);
        TotalAmount = itemView.FindViewById<TextView> (Resource.Id.total);
        cbx = itemView.FindViewById<CheckBox>(Resource.Id.cbc);

        itemView.Click += (sender, e) => itemlistner (idA);
        Quantity.ItemSelected+= new EventHandler<AdapterView.ItemSelectedEventArgs> (spinnerItemSelected);
    }

}
public class RecycleAdapter:RecyclerView.Adapter
{
    public event EventHandler<string> ItemClick;
    public event EventHandler<AdapterView.ItemSelectedEventArgs> SpinnerItemSelectionChanged;

    public List<ItemAli> Items;
    Activity Context;
    List<string> _quantity = new List<string> ();

    public RecycleAdapter (Activity context, List<ItemAli> list)
    {
        this.Items = list;
        this.Context = context;
        PopulateSpinnerDropDownValues ();
    }

    void PopulateSpinnerDropDownValues()
    {
        _quantity.Add ("0");
        _quantity.Add ("1");
        _quantity.Add ("2");
        _quantity.Add ("3");
        _quantity.Add ("4");
        _quantity.Add ("5");
        _quantity.Add ("6");
        _quantity.Add ("7");
        _quantity.Add ("8");
        _quantity.Add ("9");
        _quantity.Add("10");
        _quantity.Add("11");
        _quantity.Add("12");
        _quantity.Add("13");
        _quantity.Add("14");
        _quantity.Add("15");
    }

    public override RecyclerView.ViewHolder
    OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.From(parent.Context).
            Inflate(Resource.Layout.list_items, parent, false);

        VegeViewHolder vh = new VegeViewHolder(itemView, OnClick,spinner_ItemSelected);
        return vh;
    }

    public override int ItemCount
    {
        get { return Items != null ? Items.Count : 0; }
    }

    void OnClick(string IdAlimento)
    {
        if (ItemClick != null)
            ItemClick (this, IdAlimento);
    }

    private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e)
    {
        if (SpinnerItemSelectionChanged != null)
            SpinnerItemSelectionChanged (sender, e);
    }
    public Bitmap GetBitmapFromUrl(string url)
    {
        using (WebClient webClient = new WebClient())
        {
            byte[] bytes = webClient.DownloadData(url);
            if (bytes != null && bytes.Length > 0)
            {
                return BitmapFactory.DecodeByteArray(bytes, 0, bytes.Length);
            }
        }
        return null;
    }




    public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
    {
        var item = Items[position];

        var vh = viewHolder as VegeViewHolder;
        var spinnerPos = 0;
        var adapter =new ArrayAdapter<String>(Context, Android.Resource.Layout.SimpleSpinnerItem, _quantity);
        adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);

        vh.Name.Text = item.Name;
        vh.Price.Text = string.Format("Precio: ${0}",item.Price);
        vh.ItemView.Tag = position;
        if (item.Quantity > 0) {
            spinnerPos = adapter.GetPosition (item.Quantity.ToString ());
            vh.TotalAmount.Text = string.Format ("${0}", item.Price * item.Quantity);
        } else {
            vh.TotalAmount.Text = "";
        }
        vh.Quantity.Tag = position;
        vh.Quantity.Adapter = adapter;
        vh.Quantity.SetSelection(spinnerPos);
        Bitmap bitmap = GetBitmapFromUrl(item.ImageId);
        vh.Image.SetImageBitmap(bitmap);
        vh.idA = item.AliID +"°"+ item.ImageId + "°" + item.Name + "°" + item.Price + "°" + item.Time;
        vh.cbx.Checked = item.AddToOrder;
    }


}

}

0 个答案:

没有答案