0

mikepenz materialdrawerライブラリのアカウント プロファイル セクションに仕切りを追加するにはどうすればよいですか?

引き出し自体に仕切りを追加するために使用できますnew DividerDrawerItem()が、プロファイル セクションに仕切りを追加する方法はありません。どうやってやるの?

4

1 に答える 1

1

うーん、プロファイルセクション内に仕切りを取得する最も簡単な方法は、DividerDrawerItem に似たアイテムを作成することですが、アカウントにも追加できるように IProfile も実装する必要があります。 t はヘッダーに表示され、選択できません。

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" /> 
于 2016-06-09T12:04:08.160 に答える