From 7e069530ed7d3f62245b93e4b21d1d5edbdce6d2 Mon Sep 17 00:00:00 2001 From: Mike Penz Date: Tue, 28 Jun 2016 20:15:02 +0200 Subject: [PATCH] * add new listener which allows you to hook into the click behavior of the `MiniDrawer` and prevent default behavior if needed * FIX #1351 --- MIGRATION.md | 5 ++ .../mikepenz/materialdrawer/MiniDrawer.java | 61 ++++++++++++++++--- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/MIGRATION.md b/MIGRATION.md index 15acce521..d7e4da751 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,5 +1,10 @@ ###Upgrade Notes +#### v5.3.1 -> v5.3.2 +* the `withOnMiniDrawerItemClickListener` was renamed to `withOnMiniDrawerItemOnClickListener` +* added new separate `OnMiniDrawerItemClickListener` which allows to hook into the default behavior, and prevent it if necessary + * NOTE: this one now uses the `withOnMiniDrawerItemClickListener` method. + #### v5.2.0 -> v5.2.1 * the `SecondaryDrawerItem` is now a subclass of the `PrimaryDrawerItem` (extends `PrimaryDrawerItem`). If you have an `if` which checks for the type with `instanceOf` make sure you check for the `SecondaryDrawerItem` first. (`secondaryDrawerItem instanceOf PrimaryDrawerItem == true`) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java b/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java index fa4b9e22a..f773bce98 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java +++ b/library/src/main/java/com/mikepenz/materialdrawer/MiniDrawer.java @@ -150,27 +150,42 @@ public MiniDrawer withEnableSelectedMiniDrawerItemBackground(boolean enableSelec * set to false if you do not want the profile image to toggle to the normal drawers profile selection * * @param enableProfileClick - * @return + * @return this */ public MiniDrawer withEnableProfileClick(boolean enableProfileClick) { this.mEnableProfileClick = enableProfileClick; return this; } - private FastAdapter.OnClickListener mOnMiniDrawerItemClickListener; + private OnMiniDrawerItemClickListener mOnMiniDrawerItemClickListener; /** - * Define an onClickListener for the MiniDrawer item adapter. WARNING: this will overwrite the default behavior + * Define the onMiniDrawerItemClickListener called before any logic in the MiniDrawer is run, allows you to intercept the default behavior * * @param onMiniDrawerItemClickListener - * @return + * @return this */ - public MiniDrawer withOnMiniDrawerItemClickListener(FastAdapter.OnClickListener onMiniDrawerItemClickListener) { + public MiniDrawer withOnMiniDrawerItemClickListener(OnMiniDrawerItemClickListener onMiniDrawerItemClickListener) { this.mOnMiniDrawerItemClickListener = onMiniDrawerItemClickListener; return this; } + private FastAdapter.OnClickListener mOnMiniDrawerItemOnClickListener; + + /** + * Define an onClickListener for the MiniDrawer item adapter. WARNING: this will completely overwrite the default behavior + * You may want to check the `OnMiniDrawerItemClickListener` (withOnMiniDrawerItemClickListener) which just hooks into the default behavior + * + * @param onMiniDrawerItemOnClickListener + * @return this + */ + public MiniDrawer withOnMiniDrawerItemOnClickListener(FastAdapter.OnClickListener onMiniDrawerItemOnClickListener) { + this.mOnMiniDrawerItemOnClickListener = onMiniDrawerItemOnClickListener; + return this; + } + + private FastAdapter.OnLongClickListener mOnMiniDrawerItemLongClickListener; /** @@ -238,14 +253,24 @@ public ICrossfader getCrossFader() { return mCrossFader; } - public FastAdapter.OnClickListener getOnMiniDrawerItemClickListener() { - return mOnMiniDrawerItemClickListener; + + /** + * the defined FastAdapter.OnClickListener which completely replaces the original behavior + * + * @return + */ + public FastAdapter.OnClickListener getOnMiniDrawerItemOnClickListener() { + return mOnMiniDrawerItemOnClickListener; } + /** + * @return + */ public FastAdapter.OnLongClickListener getOnMiniDrawerItemLongClickListener() { return mOnMiniDrawerItemLongClickListener; } + /** * generates a MiniDrawerItem from a IDrawerItem * @@ -452,13 +477,19 @@ public void createItems() { } //listener - if (mOnMiniDrawerItemClickListener != null) { - mAdapter.withOnClickListener(mOnMiniDrawerItemClickListener); + if (mOnMiniDrawerItemOnClickListener != null) { + mAdapter.withOnClickListener(mOnMiniDrawerItemOnClickListener); } else { mAdapter.withOnClickListener(new FastAdapter.OnClickListener() { @Override public boolean onClick(View v, IAdapter adapter, final IDrawerItem item, final int position) { int type = getMiniDrawerType(item); + + //if a listener is defined and we consume the event return + if (mOnMiniDrawerItemClickListener != null && mOnMiniDrawerItemClickListener.onItemClick(v, position, item, type)) { + return false; + } + if (type == ITEM) { //fire the onClickListener also if the specific drawerItem is not Selectable if (item.isSelectable()) { @@ -498,4 +529,16 @@ public boolean onClick(View v, IAdapter adapter, final IDrawerItem private List getDrawerItems() { return mDrawer.getOriginalDrawerItems() != null ? mDrawer.getOriginalDrawerItems() : mDrawer.getDrawerItems(); } + + + public interface OnMiniDrawerItemClickListener { + /** + * @param view + * @param position + * @param drawerItem + * @param type either MiniDrawer.PROFILE or MiniDrawer.ITEM + * @return true if the event was consumed + */ + boolean onItemClick(View view, int position, IDrawerItem drawerItem, int type); + } }