1:修改在线用户展示

2:修改最小化进入房间更新数据
This commit is contained in:
2025-12-09 18:14:52 +08:00
parent 8b9fd2ba08
commit 0d188736b2
5 changed files with 140 additions and 162 deletions

View File

@@ -212,135 +212,106 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
@Override
public void getRoomOnline(RoomOnline onlineBean) {
if (!isValidContext()) {
return;
}
try {
// 确保在主线程中执行UI操作
if (getActivity() == null || mBinding == null) {
getActivity().runOnUiThread(() -> {
finishRefreshOrLoad();
if (onlineBean == null) {
handleEmptyData();
return;
}
getActivity().runOnUiThread(() -> {
// 完成刷新或加载更多操作
if (mBinding.srl != null) {
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(onlineBean);
updateAdapterData(roomOnlineBeanList);
updateUserCount(onlineBean.getCount());
});
}
List<RoomOnlineBean> roomOnlineBeanList = new ArrayList<>();
// 处理第一页数据(刷新操作)
if (page <= 1) {
// 清空之前的数据
roomOnlineAdapter.setNewData(new ArrayList<>());
}
private boolean isValidContext() {
return getActivity() != null && mBinding != null;
}
int type_pit;
if (pit_number.isEmpty()) {
type_pit = 1;
} else {
type_pit = 2;
}
if (onlineBean.getOn_pit() != null && onlineBean.getOn_pit().size() > 0) {
RoomOnlineBean roomOnlineBean = new RoomOnlineBean();
roomOnlineBean.setItemViewType(1);
roomOnlineBean.setTypeNames("麦上用户");
roomOnlineBeanList.add(roomOnlineBean);
for (RoomOnlineBean roomOnlineBean1 : onlineBean.getOn_pit()) {
roomOnlineBean1.setType(1);
roomOnlineBean1.setType_pit(0);
roomOnlineBean1.setItemViewType(2);
roomOnlineBeanList.add(roomOnlineBean1);
}
private void finishRefreshOrLoad() {
if (mBinding.srl == null) return;
}
if (onlineBean.getOff_pit() != null && onlineBean.getOff_pit().size() > 0) {
RoomOnlineBean roomOnlineBean = new RoomOnlineBean();
roomOnlineBean.setItemViewType(1);
roomOnlineBean.setTypeNames("麦下用户");
roomOnlineBeanList.add(roomOnlineBean);
for (RoomOnlineBean roomOnlineBean2 : onlineBean.getOff_pit()) {
roomOnlineBean2.setType(2);
roomOnlineBean2.setType_pit(type_pit);
roomOnlineBean2.setItemViewType(2);
roomOnlineBeanList.add(roomOnlineBean2);
}
}
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
// 根据是刷新还是加载更多来处理数据
if (page <= 1) {
// 刷新操作,设置新数据
roomOnlineAdapter.setNewData(roomOnlineBeanList);
} else {
// 加载更多操作,添加数据
if (roomOnlineBeanList.size() > 0) {
roomOnlineAdapter.addData(roomOnlineBeanList);
} else {
// 没有更多数据了
if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
}
private void handleEmptyData() {
if (page <= 1) {
roomOnlineAdapter.setNewData(new ArrayList<>());
} else if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
// 更新用户总数
// 更新用户总数 - 仅在第一页刷新时更新总数
if (page <= 1) {
int total = 0;
if (onlineBean.getOn_pit() != null) {
total += onlineBean.getOn_pit().size();
}
if (onlineBean.getOff_pit() != null) {
total += onlineBean.getOff_pit().size();
}
private List<RoomOnlineBean> processOnlineData(RoomOnline onlineBean) {
List<RoomOnlineBean> result = new ArrayList<>();
boolean isFirstPage = page <= 1;
int typePit = pit_number.isEmpty() ? 1 : 2;
// 只有当获取到有效数据时才更新总数显示
if (onlineBean.getOn_pit() != null || onlineBean.getOff_pit() != null) {
mBinding.tvNum.setText("用户列表(" + total + ")人");
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(total);
}
}
// 如果两个列表都为null保持之前的总数显示不变
} else {
// 加载更多时,更新总数显示
int currentTotal = 0;
List<RoomOnlineBean> currentData = roomOnlineAdapter.getData();
for (RoomOnlineBean bean : currentData) {
if (bean.getItemViewType() == 2) { // 只统计用户项,不统计标题项
currentTotal++;
}
}
// 处理麦上用户
processUserList(onlineBean.getOn_pit(), result, "麦上用户",
isFirstPage, 1, 0);
mBinding.tvNum.setText("用户列表(" + currentTotal + ")人");
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(currentTotal);
}
}
// 处理麦下用户
processUserList(onlineBean.getOff_pit(), result, "麦下用户",
isFirstPage, 2, typePit);
// 检查是否需要禁用加载更多(如果当前页数据少于预期)
if (onlineBean.getOn_pit() != null && onlineBean.getOff_pit() != null) {
int currentCount = onlineBean.getOn_pit().size() + onlineBean.getOff_pit().size();
if (currentCount < 10 && page > 1) { // 每页预期10条数据
if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
}
});
} catch (Exception e) {
// 确保在异常情况下也能完成刷新操作
if (getActivity() != null && mBinding != null && mBinding.srl != null) {
getActivity().runOnUiThread(() -> {
if (page <= 1) {
mBinding.srl.finishRefresh(false);
} else {
mBinding.srl.finishLoadMore(false);
}
});
}
e.printStackTrace();
return result;
}
private void processUserList(List<RoomOnlineBean> userList,
List<RoomOnlineBean> result, String title,
boolean addTitle, int type, int typePit) {
if (userList == null || userList.isEmpty()) {
return;
}
if (addTitle) {
RoomOnlineBean titleBean = createTitleBean(title);
result.add(titleBean);
}
for (RoomOnlineBean userBean : userList) {
userBean.setType(type);
userBean.setType_pit(typePit);
userBean.setItemViewType(2);
result.add(userBean);
}
}
private RoomOnlineBean createTitleBean(String title) {
RoomOnlineBean titleBean = new RoomOnlineBean();
titleBean.setItemViewType(1);
titleBean.setTypeNames(title);
return titleBean;
}
private void updateAdapterData(List<RoomOnlineBean> newData) {
if (page <= 1) {
roomOnlineAdapter.setNewData(newData);
} else if (!newData.isEmpty()) {
roomOnlineAdapter.addData(newData);
} else if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
private void updateUserCount(int count) {
if (mBinding.tvNum != null) {
mBinding.tvNum.setText(String.format("用户列表(%d)人", count));
}
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(count);
}
}