public static void InjectAnimeListAdapterWithFooter(this AbsListView listView, Context context,
                                                            IList <AnimeItemViewModel> items,
                                                            AnimeListDisplayModes mode, View footer, Action <AnimeItemViewModel> onClick = null, bool allowGridItemSwipe = true, bool skipBugFix = false)
        {
            switch (mode)
            {
            case AnimeListDisplayModes.IndefiniteList:
                listView.InjectFlingAdapter(items, (view, i, model) =>
                {
                    ((AnimeListItem)view).BindModel(model, false);
                },
                                            (view, i, model) =>
                {
                    ((AnimeListItem)view).BindModel(model, true);
                },
                                            i => new AnimeListItem(context, onClick)
                                            , null, footer);
                break;

            case AnimeListDisplayModes.IndefiniteGrid:
                listView.InjectFlingAdapter(items, (view, i, model) =>
                {
                    ((AnimeGridItem)view).BindModel(model, false);
                },
                                            (view, i, model) =>
                {
                    ((AnimeGridItem)view).BindModel(model, true);
                },
                                            i => new AnimeGridItem(context, allowGridItemSwipe, onClick)
                                            , null, footer, skipBugFix);
                break;

            case AnimeListDisplayModes.IndefiniteCompactList:
                listView.InjectFlingAdapter(items, (view, i, model) =>
                {
                    var item      = (AnimeCompactItem)view;
                    item.Position = i;
                    item.BindModel(model, false);
                },
                                            (view, i, model) =>
                {
                    var item      = (AnimeCompactItem)view;
                    item.Position = i;
                    item.BindModel(model, true);
                },
                                            i => new AnimeCompactItem(context, i, onClick)
                                            , null, footer);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }