From 40a401c0d2be2e2e9e24f5a39991090ec4baf39d Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Mon, 6 Jun 2016 19:18:15 +0200 Subject: [PATCH] * allow to define the stateManagement of the FastAdapter via the MaterialDrawer --- .../java/com/mikepenz/materialdrawer/Drawer.java | 2 +- .../mikepenz/materialdrawer/DrawerBuilder.java | 16 +++++++++++++++- .../com/mikepenz/materialdrawer/MiniDrawer.java | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java index c3ecdf6ae..913cf9874 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/Drawer.java @@ -179,7 +179,7 @@ public Materialize getMaterialize() { */ public MiniDrawer getMiniDrawer() { if (mDrawerBuilder.mMiniDrawer == null) { - mDrawerBuilder.mMiniDrawer = new MiniDrawer().withDrawer(this).withAccountHeader(mDrawerBuilder.mAccountHeader); + mDrawerBuilder.mMiniDrawer = new MiniDrawer().withDrawer(this).withAccountHeader(mDrawerBuilder.mAccountHeader).withPositionBasedStateManagement(mDrawerBuilder.mPositionBasedStateManagement); } return mDrawerBuilder.mMiniDrawer; } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java b/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java index b04e205c6..8b92c9bcd 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/DrawerBuilder.java @@ -863,11 +863,24 @@ public DrawerBuilder withHasStableIds(boolean hasStableIds) { } // an adapter to use for the list + protected boolean mPositionBasedStateManagement = true; protected FastAdapter mAdapter; protected HeaderAdapter mHeaderAdapter = new HeaderAdapter<>(); protected ItemAdapter mItemAdapter = new ItemAdapter<>(); protected FooterAdapter mFooterAdapter = new FooterAdapter<>(); + /** + * This allows to disable the default position based statemanagment of the FastAdapter and switch to the + * new identifier based state managment + * + * @param positionBasedStateManagement enable / disable the positionBasedStateManagement + * @return this + */ + public DrawerBuilder withPositionBasedStateManagement(boolean positionBasedStateManagement) { + this.mPositionBasedStateManagement = positionBasedStateManagement; + return this; + } + /** * Define a custom Adapter which will be used in the drawer * NOTE: this is not recommender @@ -894,6 +907,7 @@ protected FastAdapter getAdapter() { mAdapter.withSelectable(true); mAdapter.withAllowDeselection(false); mAdapter.setHasStableIds(mHasStableIds); + mAdapter.withPositionBasedStateManagement(mPositionBasedStateManagement); //we wrap our main Adapter with the item hosting adapter mHeaderAdapter.wrap(mItemAdapter.wrap(mFooterAdapter.wrap(mAdapter))); @@ -1485,7 +1499,7 @@ public Drawer buildView() { //we only want to hook a Drawer to the MiniDrawer if it is the main drawer, not the appended one if (!mAppended && mGenerateMiniDrawer) { // if we should create a MiniDrawer we have to do this now - mMiniDrawer = new MiniDrawer().withDrawer(result).withAccountHeader(mAccountHeader); + mMiniDrawer = new MiniDrawer().withDrawer(result).withAccountHeader(mAccountHeader).withPositionBasedStateManagement(mPositionBasedStateManagement); } //forget the reference to the activity diff --git a/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java b/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java index 0606ea0e9..cb979df0c 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java @@ -103,6 +103,21 @@ public MiniDrawer withInRTL(boolean inRTL) { return this; } + + protected boolean mPositionBasedStateManagement = true; + + /** + * This allows to disable the default position based statemanagment of the FastAdapter and switch to the + * new identifier based state managment + * + * @param positionBasedStateManagement enable / disable the positionBasedStateManagement + * @return this + */ + public MiniDrawer withPositionBasedStateManagement(boolean positionBasedStateManagement) { + this.mPositionBasedStateManagement = positionBasedStateManagement; + return this; + } + private boolean mIncludeSecondaryDrawerItems = false; /** @@ -298,6 +313,7 @@ public View build(Context ctx) { mAdapter = new FastItemAdapter<>(); mAdapter.withSelectable(true); mAdapter.withAllowDeselection(false); + mAdapter.withPositionBasedStateManagement(mPositionBasedStateManagement); mRecyclerView.setAdapter(mAdapter); //if the activity with the drawer should be fullscreen add the padding for the statusbar