2016-06-09 1 views
0

Как добавить разделитель в раздел профиля учетной записи в библиотеке mikepenz materialdrawer?Как добавить разделитель в раздел профиля учетной записи библиотеки mikepenz materialdrawer?

Я могу использовать new DividerDrawerItem(), чтобы добавить делитель в сам ящик, но нет возможности добавить разделитель в раздел профиля. Как я могу это сделать?

ответ

1

Хммм, чтобы получить разделитель внутри раздела «Профили», самым простым было бы создать элемент, похожий на DividerDrawerItem, но он также должен реализовать IProfile, чтобы вы могли добавить его также в учетные записи, и вам просто нужно сделать его недоступным поэтому он не будет отображаться в заголовке и не может быть выбран.

public class AccountDividerDrawerItem extends AbstractDrawerItem<AccountDividerDrawerItem, AccountDividerDrawerItem.ViewHolder> implements IProfile<AccountDividerDrawerItem> { 
@Override 
public int getType() { 
    return R.id.material_drawer_profile_item_divider; 
} 

@Override 
@LayoutRes 
public int getLayoutRes() { 
    return com.mikepenz.materialdrawer.R.layout.material_drawer_item_divider; 
} 

@Override 
public void bindView(ViewHolder viewHolder) { 
    Context ctx = viewHolder.itemView.getContext(); 

    //set the identifier from the drawerItem here. It can be used to run tests 
    viewHolder.itemView.setId(hashCode()); 

    //define how the divider should look like 
    viewHolder.view.setClickable(false); 
    viewHolder.view.setEnabled(false); 
    viewHolder.view.setMinimumHeight(1); 
    ViewCompat.setImportantForAccessibility(viewHolder.view, 
      ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO); 

    //set the color for the divider 
    viewHolder.divider.setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ctx, com.mikepenz.materialdrawer.R.attr.material_drawer_divider, com.mikepenz.materialdrawer.R.color.material_drawer_divider)); 

    //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 ViewHolderFactory<ViewHolder> getFactory() { 
    return new ItemFactory(); 
} 

@Override 
public AccountDividerDrawerItem withName(String name) { 
    return null; 
} 

@Override 
public StringHolder getName() { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withEmail(String email) { 
    return null; 
} 

@Override 
public StringHolder getEmail() { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(Drawable icon) { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(Bitmap bitmap) { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(@DrawableRes int iconRes) { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(String url) { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(Uri uri) { 
    return null; 
} 

@Override 
public AccountDividerDrawerItem withIcon(IIcon icon) { 
    return null; 
} 

@Override 
public ImageHolder getIcon() { 
    return null; 
} 

public static class ItemFactory implements ViewHolderFactory<ViewHolder> { 
    public ViewHolder create(View v) { 
     return new ViewHolder(v); 
    } 
} 

protected static class ViewHolder extends RecyclerView.ViewHolder { 
    private View view; 
    private View divider; 

    private ViewHolder(View view) { 
     super(view); 
     this.view = view; 
     this.divider = view.findViewById(com.mikepenz.materialdrawer.R.id.material_drawer_divider); 
    } 
} 
} 

Всего 2 вещи!

  1. Ваш товар также должен иметь соответствующий общий тип, определенный для AbstractDrawerItem.
  2. Вы должны закрепить идентификатор в методе getType(), потому что он должен быть уникальным и не может быть повторно использован для элементов. (Обработка внутреннего кэша RecyclerView).

Примечания что: R.id.material_drawer_profile_item_divider не существует и должен заменить произвольный локальный identifier! таким образом, создать ids.xml файл в values каталоге и добавьте эту строку в том, что:

<item name="material_drawer_profile_item_divider" type="id" /> 
+0

Я ответил бы вам: DI думает, что был тот же вопрос уже на GitHub;) Приложение образца уже содержит источник этого пункта;) https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.java – mikepenz