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