美文网首页
(Android)设计多选项的操作

(Android)设计多选项的操作

作者: 西厌西厌 | 来源:发表于2019-08-15 18:32 被阅读0次

需求

设想产品出了一个分享的功能,点击分享按钮,弹出分享平台选择,微信,朋友圈,微博等等,一般情况下,你会通过以下两种方式实现:

  1. 直接在布局文件里写,水平布局,相对布局,写一大批
  2. 用RecylerView+Adapter写,数据是这样的
int bgRes = [];
int titleRes = [];

下版本升级的时候,产品说,这个分享框里的内容要根据普通用户,管理员,VIP会划分,而且普通用户还有拉黑与未拉黑,是否开放了分享权限的,这时候,用上面两种方式来写,就完蛋了。

新的思路

啥也不说,拿出代码

public class GroupUserHelper extends CommonHelper {
    GroupUserInfo groupUserInfo;
    GroupDetInfo groupDetInfo;
    OnSimpleClickListener onCommonResultListener;
    String groupId;

    public final static int REQUESTS_MAKE_MANAGER = 0;// 设置管理员
    public final static int REQUESTS_CANCEL_MANAGER = 1;//取消管理员
    public final static int REQUESTS_REMOVE_USER = 2;//移除
    public final static int REQUESTS_BLACK = 3;
    public final static int REQUESTS_UN_BLACK = 4;//移除

    public GroupUserHelper(Context context, GroupDetInfo GroupDetInfo, GroupUserInfo groupUserInfo) {
        super(context);
        this.groupUserInfo = groupUserInfo;
        this.groupDetInfo = GroupDetInfo;
        if (groupDetInfo != null) {
            groupId = groupDetInfo.getId();
        }
    }

    public GroupUserHelper(Context context, String groupId, GroupUserInfo groupUserInfo) {
        super(context);
        this.groupUserInfo = groupUserInfo;
        this.groupId = groupId;
    }

    /**
     * 粉丝列表只有拉黑与取消拉黑
     */
    public void showOnlyBlackDialog() {
        List<GroupManageInfo> items = new ArrayList<>();
        boolean userBlack = groupUserInfo.isIs_black();
        if (userBlack) {
            items.add(createBLACK());
        } else {
            items.add(createBLACK());
        }
        ManageUserDialog manageDIalog = new ManageUserDialog(context, groupUserInfo, items, new OnSimpleClickListener() {
            @Override
            public void onClick(int position) {
                handleClick(position);
            }

        });
        manageDIalog.show();
    }

    public void showDialog() {

        ManageUserDialog manageDIalog = new ManageUserDialog(context, groupUserInfo, getManageInfo(), new OnSimpleClickListener() {
            @Override
            public void onClick(int position) {
                handleClick(position);
            }

        });
        manageDIalog.show();
    }

    /**
     * 处理点击
     *
     * @param position
     */
    private void handleClick(int position) {
        switch (position) {
            case GroupManageUserType.MAKE_MANAGER:
                startMakeManager();
                CUtils.onClick(context, "member_edit_admin");
                break;
            case GroupManageUserType.CANCEL_MANAGER:
                CUtils.onClick(context, "member_edit_admin_cancel");
                startCancelManagerShowDialog();
                break;
            case GroupManageUserType.MOVE:
                CUtils.onClick(context, "member_edit_remove");
                int isfreeGroup = groupDetInfo.getType();
                if (isfreeGroup == GroupType.GROUP_CHARGE) {
                    //int payStatus = groupUserInfo.getPay_status();
                    int payStatus = 1;
                    if (payStatus == 0) {
                        // RemoveUserActivity.show(context, groupDetInfo, groupUserInfo);
                    } else {
                        startRemoveShowDialog();
                    }
                } else {
                    startRemoveShowDialog();
                }
                break;
            case GroupManageUserType.BLACK:
                CUtils.onClick(context, "member_edit_black");
                showBlackUserDialog();
                break;
            case GroupManageUserType.REMOVE_BLACK:
                CUtils.onClick(context, "blacklist_edit_black_cancel");
                startUnBlackUser();
                break;
            case GroupManageUserType.CANCEL_GUEST:
                CUtils.onClick(context,"member_cancel_guest");
                BaseTipsDialog baseTipsDialog = new BaseTipsDialog(context, "确定要取消该成员的嘉宾身份", new BaseTipsDialog.DialogAfterClickListener() {
                    @Override
                    public void onSure() {

                        startCancelGuest();
                    }

                    @Override
                    public void onCancel() {

                    }
                });
                baseTipsDialog.hideTitle();
                baseTipsDialog.show();

                break;
        }
    }

    /**
     * 拉黑
     */
    private void showBlackUserDialog() {
        String userName = groupUserInfo.getName();
        BaseTipsDialog baseTipsDialog = new BaseTipsDialog(context, "确定要将" + userName + "拉黑?拉黑后该用户发表的内容仅其个人所见不会骚扰到星球其他成员", new BaseTipsDialog.DialogAfterClickListener() {
            @Override
            public void onSure() {
                startBlackUser();
            }

            @Override
            public void onCancel() {

            }
        });
        baseTipsDialog.hideTitle();
        baseTipsDialog.show();
    }

    private void startRemoveShowDialog() {
        String userName = groupUserInfo.getName();
        BaseTipsDialog baseTipsDialog = new BaseTipsDialog(context, "确定要将" + userName + "移除星球吗?", new BaseTipsDialog.DialogAfterClickListener() {
            @Override
            public void onSure() {
                startRemoveUser("");
                CUtils.onClick(context, "remove_member_confrim");
            }

            @Override
            public void onCancel() {
                CUtils.onClick(context, "remove_member_cancel");
            }
        });
        baseTipsDialog.hideTitle();
        baseTipsDialog.show();
    }

    private void startCancelManagerShowDialog() {
        BaseTipsDialog baseTipsDialog = new BaseTipsDialog(context, "确定要取消该成员的管理员身份", new BaseTipsDialog.DialogAfterClickListener() {
            @Override
            public void onSure() {

                startCancelManager();
            }

            @Override
            public void onCancel() {

            }
        });
        baseTipsDialog.hideTitle();
        baseTipsDialog.show();
    }

    /**
     * 设置管理员
     */
    private void startMakeManager() {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.put("identity", "1");
        params.putLog("设置管理员");
        putDataTwo(REQUESTS_MAKE_MANAGER, ResultInfo.class, params, "groups/" + groupDetInfo.getId() + "/users/" + groupUserInfo.getId() + "/set_manager");
    }

    /**
     * 移除
     */
    public void startRemoveUser(String remark) {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.put("remark", remark);
        params.putLog("移除");
        putDataTwo(REQUESTS_REMOVE_USER, ResultInfo.class, params, "groups/" + groupDetInfo.getId() + "/users/" + groupUserInfo.getId() + "/get_out");
    }

    /**
     * 拉黑
     */
    public void startBlackUser() {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.putLog("拉黑");
        putDataTwo(REQUESTS_BLACK, ResultInfo.class, params, "groups/" + groupId + "/users/" + groupUserInfo.getId() + "/set_black");
    }


    /**
     * 取消拉黑
     */
    public void startUnBlackUser() {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.putLog("取消拉黑");
        putDataTwo(REQUESTS_UN_BLACK, ResultInfo.class, params, "groups/" + groupId + "/users/" + groupUserInfo.getId() + "/cancel_black");
    }

    /**
     * 取消管理员
     */
    private void startCancelManager() {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.put("identity", "0");
        params.putLog("取消管理员");
        putDataTwo(REQUESTS_CANCEL_MANAGER, ResultInfo.class, params, "groups/" + groupDetInfo.getId() + "/users/" + groupUserInfo.getId() + "/cancel_manager");
    }

    /**
     * 取消嘉宾
     */
    private void startCancelGuest() {
        final SummerParameter params = PostData.getPostParameters(context);
        params.setDisableCache();
        params.putLog("取消嘉宾");
        putDataTwo(REQUESTS_CANCEL_MANAGER, ResultInfo.class, params, "groups/" + groupDetInfo.getId() + "/users/" + groupUserInfo.getId() + "/cancel_guest");
    }


    private List<GroupManageInfo> getManageInfo() {
        List<GroupManageInfo> items = new ArrayList<>();
        boolean isSelfMaster = GroupHelper.isSelfMaster(groupDetInfo);
        boolean userBlack = groupUserInfo.isIs_black();
        if (userBlack) {
            items.add(createBLACK());
            if (isSelfMaster) {
                items.add(createMoveUser());
            }
        } else {
            items.add(createBLACK());
            if (groupUserInfo.isIs_guest()) {
                items.add(createGuest());
            }
            if (isSelfMaster) {
                items.add(createManager());
            }
            items.add(createMoveUser());
        }
        return items;
    }

    /**
     * 管理员
     *
     * @return
     */
    private GroupManageInfo createManager() {
        GroupManageInfo info = new GroupManageInfo();
        int identity = groupUserInfo.getIdentity();
        if (identity == UserLever.USER_MANAGER) {
            info.setName("取消管理员");
            info.setType(GroupManageUserType.CANCEL_MANAGER);
        } else {
            info.setName("设置管理员");
            info.setType(GroupManageUserType.MAKE_MANAGER);
        }
        return info;
    }


    /**
     * 管理员
     *
     * @return
     */
    private GroupManageInfo createBLACK() {
        GroupManageInfo info = new GroupManageInfo();
        boolean isBlack = groupUserInfo.isIs_black();
        if (!isBlack) {
            info.setName("拉黑");
            info.setType(GroupManageUserType.BLACK);
        } else {
            info.setName("取消拉黑");
            info.setType(GroupManageUserType.REMOVE_BLACK);
        }
        return info;
    }

    /**
     * 创建置顶或取消置顶
     *
     * @return
     */
    private GroupManageInfo createMoveUser() {
        GroupManageInfo info = new GroupManageInfo();
        info.setName("移除该成员");
        info.setType(GroupManageUserType.MOVE);
        return info;
    }

    /**
     * 创建置顶或取消置顶
     *
     * @return
     */
    private GroupManageInfo createGuest() {
        GroupManageInfo info = new GroupManageInfo();
        info.setName("取消嘉宾");
        info.setType(GroupManageUserType.CANCEL_GUEST);
        return info;
    }

    @Override
    protected void handleMsg(int position, Object object) {

    }

    @Override
    protected void dealDatas(int requestCode, Object obj) {
        if (onCommonResultListener != null) {
            onCommonResultListener.onClick(requestCode);
        }
        GroupMoreActivity.isNeedRefresh = true;
        switch (requestCode) {
            case REQUESTS_MAKE_MANAGER:

                break;
            case REQUESTS_CANCEL_MANAGER:

                break;
            case REQUESTS_REMOVE_USER:
                Intent intent = new Intent(BroadConst.NOTIFY_REFRESH_USER_LIST);
                context.sendBroadcast(intent);
                break;
        }
    }

    @Override
    protected void dealErrors(int requstCode, String requestType, String errString, boolean requestCode) {

    }


    public void setOnCommonResultListener(OnSimpleClickListener onCommonResultListener) {
        this.onCommonResultListener = onCommonResultListener;
    }
}

相关文章

网友评论

      本文标题:(Android)设计多选项的操作

      本文链接:https://www.haomeiwen.com/subject/svltsctx.html