需求
设想产品出了一个分享的功能,点击分享按钮,弹出分享平台选择,微信,朋友圈,微博等等,一般情况下,你会通过以下两种方式实现:
- 直接在布局文件里写,水平布局,相对布局,写一大批
- 用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;
}
}
网友评论