From 5bc79ac7f56b8c61645c9670b96ffe8c3a417eec Mon Sep 17 00:00:00 2001 From: Davide Steduto Date: Mon, 13 Feb 2017 17:17:46 +0100 Subject: [PATCH] Resolved #281 - Delegate spanSize to IFlexible item --- .../fragments/FragmentHeadersSections.java | 16 ++-------------- .../items/ExpandableHeaderItem.java | 5 +++++ .../flexibleadapter/items/HeaderItem.java | 5 +++++ .../items/ScrollableFooterItem.java | 5 +++++ .../items/ScrollableLayoutItem.java | 5 +++++ .../flexibleadapter/items/ScrollableULSItem.java | 5 +++++ .../items/ScrollableUseCaseItem.java | 5 +++++ .../items/StaggeredHeaderItem.java | 5 +++++ .../items/AbstractFlexibleItem.java | 5 +++++ .../davidea/flexibleadapter/items/IFlexible.java | 10 +++++++++- 10 files changed, 51 insertions(+), 15 deletions(-) diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/fragments/FragmentHeadersSections.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/fragments/FragmentHeadersSections.java index 6f5e119d..13dd2882 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/fragments/FragmentHeadersSections.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/fragments/FragmentHeadersSections.java @@ -190,20 +190,8 @@ protected GridLayoutManager createNewGridLayoutManager() { gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { - // NOTE: If you use simple integers to identify the ViewType, - // here, you should use them and not Layout integers - switch (mAdapter.getItemViewType(position)) { - case R.layout.recycler_scrollable_usecase_item: - case R.layout.recycler_scrollable_header_item: - case R.layout.recycler_scrollable_footer_item: - case R.layout.recycler_scrollable_layout_item: - case R.layout.recycler_scrollable_uls_item: - case R.layout.recycler_header_item: - case R.layout.recycler_expandable_header_item: - return mColumnCount; - default: - return 1; - } + //noinspection ConstantConditions + return mAdapter.getItem(position).getSpanSize(mColumnCount, position); } }); return gridLayoutManager; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ExpandableHeaderItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ExpandableHeaderItem.java index 1683e4ba..1848709c 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ExpandableHeaderItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ExpandableHeaderItem.java @@ -95,6 +95,11 @@ public void addSubItem(int position, SubItem subItem) { addSubItem(subItem); } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_expandable_header_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/HeaderItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/HeaderItem.java index 31484fdd..f486514e 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/HeaderItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/HeaderItem.java @@ -72,6 +72,11 @@ public void setSubtitle(String subtitle) { this.subtitle = subtitle; } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_header_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableFooterItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableFooterItem.java index d52f5321..2c8b904a 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableFooterItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableFooterItem.java @@ -30,6 +30,11 @@ public ScrollableFooterItem(String id) { super(id); } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_scrollable_footer_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableLayoutItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableLayoutItem.java index 59b49515..2339bc92 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableLayoutItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableLayoutItem.java @@ -27,6 +27,11 @@ public ScrollableLayoutItem(String id) { super(id); } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_scrollable_layout_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableULSItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableULSItem.java index 904cf5e0..8a97f0f9 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableULSItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableULSItem.java @@ -28,6 +28,11 @@ public ScrollableULSItem(String id) { super(id); } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_scrollable_uls_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableUseCaseItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableUseCaseItem.java index d531c3cd..a2997095 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableUseCaseItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/ScrollableUseCaseItem.java @@ -30,6 +30,11 @@ public ScrollableUseCaseItem(String title, String subTitle) { setSubtitle(subTitle); } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_scrollable_usecase_item; diff --git a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/StaggeredHeaderItem.java b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/StaggeredHeaderItem.java index ec10506b..0c4df4dd 100644 --- a/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/StaggeredHeaderItem.java +++ b/flexible-adapter-app/src/main/java/eu/davidea/samples/flexibleadapter/items/StaggeredHeaderItem.java @@ -48,6 +48,11 @@ public void setTitle(String title) { this.title = title; } + @Override + public int getSpanSize(int spanCount, int position) { + return spanCount; + } + @Override public int getLayoutRes() { return R.layout.recycler_staggered_header_item; diff --git a/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/AbstractFlexibleItem.java b/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/AbstractFlexibleItem.java index 44b2c637..37510101 100644 --- a/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/AbstractFlexibleItem.java +++ b/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/AbstractFlexibleItem.java @@ -86,6 +86,11 @@ public void setHidden(boolean hidden) { mHidden = hidden; } + @Override + public int getSpanSize(int spanCount, int position) { + return 1; + } + /*--------------------*/ /* SELECTABLE METHODS */ /*--------------------*/ diff --git a/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/IFlexible.java b/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/IFlexible.java index 4ebe0616..3220a24f 100644 --- a/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/IFlexible.java +++ b/flexible-adapter/src/main/java/eu/davidea/flexibleadapter/items/IFlexible.java @@ -71,6 +71,15 @@ public interface IFlexible { */ void setHidden(boolean hidden); + /** + * Individual item's span size. + * + * @param spanCount current column count + * @param position the adapter position of the item + * @return the number of span occupied by the item at position. + */ + int getSpanSize(int spanCount, int position); + /*--------------------*/ /* SELECTABLE METHODS */ /*--------------------*/ @@ -92,7 +101,6 @@ public interface IFlexible { /*-------------------*/ /* TOUCHABLE METHODS */ /*-------------------*/ - //TODO: All these methods could be deprecated in favour of the same methods in FlexibleViewHolder boolean isDraggable();