Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/dialog/RoomOnlineDialogFragment.java

442 lines
15 KiB
Java
Raw Normal View History

2025-10-28 16:56:13 +08:00
package com.xscm.modulemain.dialog;
2025-10-20 10:16:44 +08:00
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.ToastUtils;
2025-10-28 16:56:13 +08:00
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.activity.room.contacts.RoomContacts;
import com.xscm.modulemain.activity.room.presenter.RoomPresenter;
import com.xscm.modulemain.adapter.RoomOnlineAdapter;
import com.xscm.modulemain.databinding.FragmentRoomOnlineDialogBinding;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.base.BaseMvpDialogFragment;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.bean.RedPacketInfo;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.bean.RoomCharmRankBean;
import com.xscm.moduleutil.bean.UserOnlineStatusBean;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
import com.xscm.moduleutil.bean.room.RoomOnline;
import com.xscm.moduleutil.bean.room.RoomOnlineBean;
import com.xscm.moduleutil.bean.room.RoomUserBean;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.util.ArrayList;
import java.util.List;
/**
* @author qx
* @data 2025/6/10
* @description: 在线列表弹框
*/
public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresenter, FragmentRoomOnlineDialogBinding> implements
RoomContacts.View {
private int page;
private RoomOnlineAdapter roomOnlineAdapter;
private RoomOnlineAdapter roomOnlineAdapter2;
private String roomId;
private String pit_number;
private RoomUserBean hostUser;
protected RoomInfoResp roomInfoResp;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
2025-10-24 17:52:11 +08:00
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
2025-10-20 10:16:44 +08:00
RoomOnlineDialogFragment dialogFragment = new RoomOnlineDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putString("pit_number", pit_number);
args.putSerializable("hostUser", hostUser); // 可选:传递参数
args.putSerializable("roomInfoResp", roomInfoResp);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomOnlineDialogFragment");
2025-10-24 17:52:11 +08:00
return dialogFragment;
2025-10-20 10:16:44 +08:00
}
@Override
protected void initData() {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.xscm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId = getArguments().getString("roomId");
pit_number = getArguments().getString("pit_number");
hostUser = (RoomUserBean) getArguments().getSerializable("hostUser");
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
}
@Override
protected void initView() {
mBinding.srl.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
2025-10-24 17:52:11 +08:00
// 添加延迟以避免过于频繁的请求
page++;
if (MvpPre != null && getArguments() != null) {
MvpPre.getRoomOnline(getArguments().getString("roomId"), page + "", "10");
} else {
refreshLayout.finishLoadMore(false);
}
2025-10-20 10:16:44 +08:00
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
2025-10-24 17:52:11 +08:00
page = 1;
if (MvpPre != null && getArguments() != null) {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
} else {
refreshLayout.finishRefresh(false);
}
2025-10-20 10:16:44 +08:00
}
});
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter(new ArrayList<RoomOnlineBean>());
mBinding.rvComment.setAdapter(roomOnlineAdapter);
roomOnlineAdapter.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() {
@Override
public void onJoinButtonClick(RoomOnlineBean item) {
MvpPre.hostUserPit(roomId, pit_number, item.getUser_id() + "", "1");
}
@Override
public void onUserInfoClick(RoomOnlineBean item) {
2025-10-24 17:52:11 +08:00
// 使用 post 延迟执行,确保 dismiss 完成后再显示新对话框
mBinding.getRoot().post(() -> {
mBinding.getRoot().post(() -> {
RoomUserInfoFragment.show(roomId, item.getUser_id() + "", pit_number, getHostUser(hostUser), false, 4, isNumberWhether(), getParentFragmentManager());
});
dismiss();
});
2025-10-20 10:16:44 +08:00
}
});
}
2025-10-24 17:52:11 +08:00
// 在类中添加以下方法
private void resetRefreshState() {
if (mBinding != null && mBinding.srl != null) {
mBinding.srl.resetNoMoreData();
}
page = 1;
}
2025-10-20 10:16:44 +08:00
private int isNumberWhether() {
for (int i = 0; i < roomInfoResp.getRoom_info().getPit_list().size(); i++) {
if (roomInfoResp.getRoom_info().getPit_list().get(i).getPit_number().equals("9") && roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id() != null &&
!roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id().equals("0") && !roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id().isEmpty())
return 1;
}
return 0;
}
private int getHostUser(RoomUserBean item) {
if (item.getPit_number() == 9) {
if (item.getIs_room_owner() == 1) {
return 1;
} else if (item.getIs_management() == 1) {
return 2;
} else if (item.getIs_host() == 1) {
return 3;
} else {
return 4;
}
} else {
if (item.getIs_room_owner() == 1) {
return 1;
} else if (item.getIs_management() == 1) {
return 2;
} else if (item.getIs_host() == 1) {
return 3;
}
return 4;
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_online_dialog;
}
@Override
public void roomInfo(RoomInfoResp resp) {
}
@Override
public void showPasswordDialog() {
}
@Override
public void enterFail() {
}
@Override
public void getRoomOnline(RoomOnline onlineBean) {
2025-10-24 17:52:11 +08:00
try {
// 确保在主线程中执行UI操作
if (getActivity() == null || mBinding == null) {
return;
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
getActivity().runOnUiThread(() -> {
// 完成刷新或加载更多操作
if (mBinding.srl != null) {
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
List<RoomOnlineBean> roomOnlineBeanList = new ArrayList<>();
// 处理第一页数据(刷新操作)
if (page <= 1) {
// 清空之前的数据
roomOnlineAdapter.setNewData(new ArrayList<>());
}
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);
}
}
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) {
// 刷新操作,设置新数据
roomOnlineAdapter.setNewData(roomOnlineBeanList);
} else {
// 加载更多操作,添加数据
if (roomOnlineBeanList.size() > 0) {
roomOnlineAdapter.addData(roomOnlineBeanList);
} 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();
}
// 只有当获取到有效数据时才更新总数显示
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++;
}
}
mBinding.tvNum.setText("在线用户(" + currentTotal + ")人");
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(currentTotal);
}
}
// 检查是否需要禁用加载更多(如果当前页数据少于预期)
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();
2025-10-20 10:16:44 +08:00
}
}
2025-10-24 17:52:11 +08:00
// @Override
2025-10-20 10:16:44 +08:00
// public void getRoomOnline(List<RoomOnlineBean> onlineBean) {
// roomOnlineAdapter.setNewData(onlineBean);
// mBinding.tvNum.setText("在线用户("+onlineBean.size()+")人");
// }
2025-10-24 17:52:11 +08:00
@Override
public void onResume() {
super.onResume();
// 每次恢复时重置刷新状态
resetRefreshState();
}
2025-10-20 10:16:44 +08:00
@Override
public void applyPit() {
}
@Override
public void downPit() {
}
@Override
public void applySong() {
}
@Override
public void agreeSong() {
}
@Override
public void postRoomInfo(RoomInfoResp resp) {
}
@Override
public void getCharmRank(List<RoomCharmRankBean> list) {
}
@Override
public void changeSong() {
}
@Override
public void hostUserPit() {
ToastUtils.showShort("抱麦成功");
2025-10-24 17:52:11 +08:00
dismiss();
2025-10-20 10:16:44 +08:00
}
@Override
public void quitRoom() {
}
2025-10-24 17:52:11 +08:00
@Override
public void quitRoom2(String roomId) {
}
2025-10-20 10:16:44 +08:00
@Override
public void userGuanzSuccess(String s) {
}
@Override
public void acceptPk() {
}
@Override
public void clearUserCharm() {
}
@Override
public void userOnlineStatus(List<UserOnlineStatusBean> list) {
}
2025-10-24 17:52:11 +08:00
@Override
public void findRoom() {
mBinding.srl.finishRefresh();
mBinding.srl.finishLoadMore();
}
@Override
public void roomRedPackets(List<RedPacketInfo> list) {
}
2025-10-20 10:16:44 +08:00
}