public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var view = new CategoryGroupRow(context);

            view.Items = categories[position].Items;

            view.CategorySelected += (object sender, CategorySelectedEventArgs e) =>
            {
                var transaction = ((AppCompatActivity)context).SupportFragmentManager.BeginTransaction();
                SearchOptionsFragment searchFragment = new SearchOptionsFragment();
                searchFragment.Category       = e.Selected;
                searchFragment.SearchLocation = this.SelectedLocation;

                transaction.Replace(Resource.Id.frameLayout, searchFragment);
                transaction.AddToBackStack(null);
                transaction.Commit();
            };

            view.CategoryLongClick += (sender, e) =>
            {
                if (this.CategoryLongClick != null)
                {
                    CategoryLongClick(sender, e);
                }
            };

            view.headerLabel.Text = categories[position].Name;

            view.Clickable = false;

            return(view);
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = new ListView(this.Activity);

            favorites = (MainActivity.databaseConnection.GetAllFavoriteCategoriesAsync().
                         Result).
                        OrderByDescending(x => x.Updated).ToList();


            view.Adapter = new ArrayAdapter <string>(this.Activity,
                                                     Android.Resource.Layout.SimpleListItem1,
                                                     favorites.Select(x => x.CategoryValue).ToList());

            view.ItemLongClick += (sender, e) =>
            {
                PopupMenu menu = new PopupMenu(this.Activity, view.GetChildAt(e.Position));
                menu.Inflate(Resource.Menu.UnfavoriteMenu);
                menu.Show();

                menu.MenuItemClick += (se, args) =>
                {
                    var result = MainActivity.databaseConnection.DeleteFavoriteCategoryAsync(favorites.ElementAt(e.Position)).Result;
                    if (MainActivity.databaseConnection.StatusCode == Models.codes.ok && result)
                    {
                        lock (favorites)
                        {
                            Activity.RunOnUiThread(() =>
                            {
                                favorites.RemoveAt(e.Position);
                                view.Adapter = new ArrayAdapter <string>(this.Activity,
                                                                         Android.Resource.Layout.SimpleListItem1,
                                                                         favorites.Select(x => x.CategoryValue).ToList());
                            });
                        }
                    }
                    else
                    {
                        Toast.MakeText(this.Activity, "Something went wrong. We're sorry!", ToastLength.Short).Show();
                    }
                    Console.WriteLine(MainActivity.databaseConnection.StatusMessage);
                };
            };

            view.ItemClick += (sender, e) =>
            {
                var transaction = this.Activity.SupportFragmentManager.BeginTransaction();
                SearchOptionsFragment searchFragment = new SearchOptionsFragment();
                var cat = favorites.ElementAt(e.Position);
                searchFragment.Category       = new KeyValuePair <string, string>(cat.CategoryKey, cat.CategoryValue);
                searchFragment.SearchLocation = this.SelectedLocation;

                transaction.Replace(Resource.Id.frameLayout, searchFragment);
                transaction.AddToBackStack(null);
                transaction.Commit();
            };

            return(view);
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = new ListView(this.Activity);
            favorites = (MainActivity.databaseConnection.GetAllFavoriteCategoriesAsync().
                             Result).
                                    OrderByDescending(x => x.Updated).ToList();

            view.Adapter = new ArrayAdapter<string>(this.Activity,
                                                    Android.Resource.Layout.SimpleListItem1,
                                                    favorites.Select(x => x.CategoryValue).ToList());

            view.ItemLongClick += (sender, e) =>
            {
                PopupMenu menu = new PopupMenu(this.Activity, view.GetChildAt(e.Position));
                menu.Inflate(Resource.Menu.UnfavoriteMenu);
                menu.Show();

                menu.MenuItemClick += (se, args) =>
                {
                    var result = MainActivity.databaseConnection.DeleteFavoriteCategoryAsync(favorites.ElementAt(e.Position)).Result;
                    if (MainActivity.databaseConnection.StatusCode == Models.codes.ok && result)
                    {
                        lock (favorites)
                        {
                            Activity.RunOnUiThread(() =>
                            {
                                favorites.RemoveAt(e.Position);
                                view.Adapter = new ArrayAdapter<string>(this.Activity,
                                        Android.Resource.Layout.SimpleListItem1,
                                                                        favorites.Select(x => x.CategoryValue).ToList());
                            });
                        }
                    }
                    else
                    {
                        Toast.MakeText(this.Activity, "Something went wrong. We're sorry!", ToastLength.Short).Show();
                    }
                    Console.WriteLine(MainActivity.databaseConnection.StatusMessage);
                };
            };

            view.ItemClick += (sender, e) =>
            {
                var transaction = this.Activity.SupportFragmentManager.BeginTransaction();
                SearchOptionsFragment searchFragment = new SearchOptionsFragment();
                var cat = favorites.ElementAt(e.Position);
                searchFragment.Category = new KeyValuePair<string, string>(cat.CategoryKey, cat.CategoryValue);
                searchFragment.SearchLocation = this.SelectedLocation;

                transaction.Replace(Resource.Id.frameLayout, searchFragment);
                transaction.AddToBackStack(null);
                transaction.Commit();
            };

            return view;
        }