Closed zayn1991 closed 6 years ago
@mikepenz I can divide this question on few simple questions:
1) I can't set or show badges and badge counts at that items (neither standart items, not custom items), though badges and badge counts shows normally in MaterialDrawer (i have 2 drawers: MaterialDrawer and MiniDrawer works together). i update item so:
itemBasket.withBadge("" + count);
resultDrawer.updateItem(itemBasket); //that works
miniResultDrawer.updateItem(itemBasket.getIdentifier()); // but that don't works
2) I can't change text color (added textView as title in layout) dynamically, by selecting item (i have custom miniDrawer-items for CustomMiniDrawer). I don't know, where to do that - is the right decision (but i know, how to change text color)
I'd solved my problems!!!!!
I changed CustomMiniDrawer
import com.mikepenz.materialdrawer.MiniDrawer;
import com.mikepenz.materialdrawer.model.MiniProfileDrawerItem;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
public class CustomMiniDrawer extends MiniDrawer {
private boolean mEnableProfileClick = true;
private boolean mEnableSelectedMiniDrawerItemBackground = false;
@Override
public int getMiniDrawerType(IDrawerItem drawerItem) {
if (drawerItem instanceof MiniProfileDrawerItem) {
return PROFILE;
} else if (drawerItem instanceof CustomMiniDrawerItem) {
return ITEM;
}
return -1;
}
private boolean mIncludeSecondaryDrawerItems = false;
public CustomMiniDrawer withIncludeSecondaryDrawerItems(boolean includeSecondaryDrawerItems) {
this.mIncludeSecondaryDrawerItems = includeSecondaryDrawerItems;
return this;
}
@Override
public IDrawerItem generateMiniDrawerItem(IDrawerItem drawerItem) {
if (drawerItem instanceof SecondaryDrawerItem) {
return mIncludeSecondaryDrawerItems ? new CustomMiniDrawerItem((SecondaryDrawerItem) drawerItem).withEnableSelectedBackground(mEnableSelectedMiniDrawerItemBackground) : null;
} else if (drawerItem instanceof PrimaryDrawerItem) {
return new CustomMiniDrawerItem((PrimaryDrawerItem) drawerItem).withEnableSelectedBackground(mEnableSelectedMiniDrawerItemBackground);
} else if (drawerItem instanceof CustomPrimaryDrawerItem) {
return new CustomMiniDrawerItem((CustomPrimaryDrawerItem) drawerItem).withEnableSelectedBackground(mEnableSelectedMiniDrawerItemBackground);
}else if (drawerItem instanceof ProfileDrawerItem) {
MiniProfileDrawerItem mpdi = new MiniProfileDrawerItem((ProfileDrawerItem) drawerItem);
mpdi.withEnabled(mEnableProfileClick);
return mpdi;
}
return null;
}
}
Then i changed CustomMiniDrawerItem so:
public class CustomMiniDrawerItem extends BaseDrawerItem<CustomMiniDrawerItem, CustomMiniDrawerItem.ViewHolder> implements ColorfulBadgeable<CustomMiniDrawerItem> {
private StringHolder mBadge;
private BadgeStyle mBadgeStyle = new BadgeStyle();
private boolean mEnableSelectedBackground = false;
protected DimenHolder mCustomHeight;
public CustomMiniDrawerItem() {}
public CustomMiniDrawerItem(CustomPrimaryDrawerItem primaryDrawerItem) {
this.mIdentifier = primaryDrawerItem.getIdentifier();
this.mTag = primaryDrawerItem.getTag();
this.mBadge = primaryDrawerItem.getBadge();
this.mBadgeStyle = primaryDrawerItem.getBadgeStyle();
this.mEnabled = primaryDrawerItem.isEnabled();
this.mSelectable = primaryDrawerItem.isSelectable();
this.mSelected = primaryDrawerItem.isSelected();
this.icon = primaryDrawerItem.getIcon();
this.selectedIcon = primaryDrawerItem.getSelectedIcon();
this.iconTinted = primaryDrawerItem.isIconTinted();
this.selectedColor = primaryDrawerItem.getSelectedColor();
this.iconColor = primaryDrawerItem.getIconColor();
this.selectedIconColor = primaryDrawerItem.getSelectedIconColor();
this.disabledIconColor = primaryDrawerItem.getDisabledIconColor();
}
public CustomMiniDrawerItem(PrimaryDrawerItem primaryDrawerItem) {
this.mIdentifier = primaryDrawerItem.getIdentifier();
this.mTag = primaryDrawerItem.getTag();
this.mBadge = primaryDrawerItem.getBadge();
this.mBadgeStyle = primaryDrawerItem.getBadgeStyle();
this.mEnabled = primaryDrawerItem.isEnabled();
this.mSelectable = primaryDrawerItem.isSelectable();
this.mSelected = primaryDrawerItem.isSelected();
this.icon = primaryDrawerItem.getIcon();
this.selectedIcon = primaryDrawerItem.getSelectedIcon();
this.iconTinted = primaryDrawerItem.isIconTinted();
this.selectedColor = primaryDrawerItem.getSelectedColor();
this.iconColor = primaryDrawerItem.getIconColor();
this.selectedIconColor = primaryDrawerItem.getSelectedIconColor();
this.disabledIconColor = primaryDrawerItem.getDisabledIconColor();
}
public CustomMiniDrawerItem(SecondaryDrawerItem secondaryDrawerItem) {
this.mIdentifier = secondaryDrawerItem.getIdentifier();
this.mTag = secondaryDrawerItem.getTag();
this.mBadge = secondaryDrawerItem.getBadge();
this.mBadgeStyle = secondaryDrawerItem.getBadgeStyle();
this.mEnabled = secondaryDrawerItem.isEnabled();
this.mSelectable = secondaryDrawerItem.isSelectable();
this.mSelected = secondaryDrawerItem.isSelected();
this.icon = secondaryDrawerItem.getIcon();
this.selectedIcon = secondaryDrawerItem.getSelectedIcon();
this.iconTinted = secondaryDrawerItem.isIconTinted();
this.selectedColor = secondaryDrawerItem.getSelectedColor();
this.iconColor = secondaryDrawerItem.getIconColor();
this.selectedIconColor = secondaryDrawerItem.getSelectedIconColor();
this.disabledIconColor = secondaryDrawerItem.getDisabledIconColor();
}
@Override
public ViewHolderFactory<ViewHolder> getFactory() {
return new ItemFactory();
}
@Override
public CustomMiniDrawerItem withBadge(StringHolder badge) {
this.mBadge = badge;
return this;
}
@Override
public CustomMiniDrawerItem withBadge(String badge) {
this.mBadge = new StringHolder(badge);
return this;
}
@Override
public CustomMiniDrawerItem withBadge(@StringRes int badgeRes) {
this.mBadge = new StringHolder(badgeRes);
return this;
}
@Override
public CustomMiniDrawerItem withBadgeStyle(BadgeStyle badgeStyle) {
this.mBadgeStyle = badgeStyle;
return this;
}
public StringHolder getBadge() {
return mBadge;
}
public CustomMiniDrawerItem withEnableSelectedBackground(boolean enableSelectedBackground) {
this.mEnableSelectedBackground = enableSelectedBackground;
return this;
}
public BadgeStyle getBadgeStyle() {
return mBadgeStyle;
}
public static class ItemFactory implements ViewHolderFactory<CustomMiniDrawerItem.ViewHolder> {
public CustomMiniDrawerItem.ViewHolder create(View v) {
return new CustomMiniDrawerItem.ViewHolder(v);
}
}
@Override
public void bindView(CustomMiniDrawerItem.ViewHolder viewHolder) {
Context ctx = viewHolder.itemView.getContext();
//set a different height for this item
if (mCustomHeight != null) {
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) viewHolder.itemView.getLayoutParams();
lp.height = mCustomHeight.asPixel(ctx);
viewHolder.itemView.setLayoutParams(lp);
}
viewHolder.itemView.setId(hashCode());
viewHolder.itemView.setEnabled(isEnabled());
viewHolder.itemView.setSelected(isSelected());
viewHolder.itemView.setTag(this);
int iconColor = getIconColor(ctx);
int selectedIconColor = getSelectedIconColor(ctx);
if (mEnableSelectedBackground) {
int selectedColor = getSelectedColor(ctx);
UIUtils.setBackground(viewHolder.view, UIUtils.getSelectableBackground(ctx, selectedColor, true));
}
boolean badgeVisible = StringHolder.applyToOrHide(mBadge, viewHolder.badge);
if (badgeVisible) {
mBadgeStyle.style(viewHolder.badge);
}
Drawable icon = ImageHolder.decideIcon(getIcon(), ctx, iconColor, isIconTinted(), 1);
Drawable selectedIcon = ImageHolder.decideIcon(getSelectedIcon(), ctx, selectedIconColor, isIconTinted(), 1);
ImageHolder.applyMultiIconTo(icon, iconColor, selectedIcon, selectedIconColor, isIconTinted(), viewHolder.icon);
//for android API 17 --> Padding not applied via xml
int verticalPadding = ctx.getResources().getDimensionPixelSize(com.mikepenz.materialdrawer.R.dimen.material_drawer_padding);
int topBottomPadding = ctx.getResources().getDimensionPixelSize(com.mikepenz.materialdrawer.R.dimen.material_mini_drawer_item_padding);
viewHolder.itemView.setPadding(verticalPadding, topBottomPadding, verticalPadding, topBottomPadding);
switch ((int)getIdentifier()){
case 0: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_main));
break;
}
case 1: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_catalog));
break;
}
case 2: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_akcii));
break;
}
case 3: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_basket));
break;
}
case 4: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_shops));
break;
}
case 5: {
viewHolder.titleMiniDrawer.setText("" + Application.getAppContext().getResources().getString(R.string.side_bar_profile));
break;
}
}
if (isSelected()){
viewHolder.titleMiniDrawer.setTextColor(Application.getAppContext().getResources().getColor(R.color.color_e3000b));
} else {
viewHolder.titleMiniDrawer.setTextColor(Application.getAppContext().getResources().getColor(R.color.color_black));
}
//call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)
onPostBindView(this, viewHolder.itemView);
}
@Override
public int getType() {
return com.mikepenz.materialdrawer.R.id.material_drawer_item_mini;
}
@Override
@LayoutRes
public int getLayoutRes() {
return R.layout.material_drawer_item_mini2;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private View view;
private ImageView icon;
private TextView badge;
private TextView titleMiniDrawer;
public ViewHolder(View view) {
super(view);
this.view = view;
this.icon = (ImageView) view.findViewById(R.id.material_drawer_icon);
this.badge = (TextView) view.findViewById(R.id.material_drawer_badge);
this.titleMiniDrawer = (TextView) view.findViewById(R.id.material_drawer_title);
}
}
}
I created items so:
itemMain = new CustomPrimaryDrawerItem().withName(R.string.side_bar_main).withIcon(R.drawable.ic_drawable_catalog).withIdentifier(0).withSelectedIcon(R.drawable.ic_drawable_catalog_selected);
And changed MiniDrawer by CustomMiniDrawer
P.S. CustomPrimaryDrawerItem is copy of standart PrimaryDrawerItem. If smeone needs help by this codes, please mark me in comment)
Hi Mike! I looked at the closed issues in search of my problem, but the answers I needed were relevant to older versions of the library. Help me, please, or give some advice I have such a problem: I need CustomItem for work in MiniDrawer and the same CustomItem for work in MaterialDrawer (i have 2 drawers at same time - as in Gmail) That is, how i need:
That is how i have now: I can't set badges at that items and can't change text color dynamically, by selecting item
And connected MaterialDrawer with that tems works fine (is second drawer): In MaterialDrawer badges and colors works fine.
For item i created material_drawer_item_mini2.xml
That is how i created CustomMiniDrawerItem:
That is how i created CustomMiniDrawer:
How i set CustomMiniDrawer:
How i set selected item:
And last, how i create items:
dependencies i used
Links, that i used: (this is very good link, but I could not use them, because much has changed since that moment ) https://github.com/mikepenz/MaterialDrawer/issues/1090#issuecomment-195913322
https://github.com/mikepenz/MaterialDrawer/blob/develop/library/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.java#L161
https://github.com/mikepenz/MaterialDrawer/commit/8deedf8470f19c74ed6b826fd5aadc4eaed506da#diff-cc191e6c2a11ce5e036f0475a0aa8e82R14