package com.xscm.modulemain.dialog; 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; 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; import com.xscm.moduleutil.base.BaseMvpDialogFragment; import com.xscm.moduleutil.bean.RedPacketInfo; 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.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author qx * @data 2025/6/10 * @description: 在线列表弹框 */ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment 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; private List onlineBeanList = new ArrayList<>(); private RoomOnline mOnlineBean; @Override protected RoomPresenter bindPresenter() { return new RoomPresenter(this, getActivity()); } public static RoomOnlineDialogFragment show(String id, String pit_number, RoomOnline mOnlineBean, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) { 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); args.putSerializable("mOnlineBean", mOnlineBean); dialogFragment.setArguments(args); dialogFragment.show(fragmentManager, "RoomOnlineDialogFragment"); return dialogFragment; } @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"); mOnlineBean = (RoomOnline) getArguments().getSerializable("mOnlineBean"); 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) { // 添加延迟以避免过于频繁的请求 page++; if (MvpPre != null && getArguments() != null) { MvpPre.getRoomOnline(getArguments().getString("roomId"), page + "", "10"); } else { refreshLayout.finishLoadMore(false); } } @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { page = 1; if (MvpPre != null && getArguments() != null) { MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10"); } else { refreshLayout.finishRefresh(false); } } }); List roomOnlineBeanList = processOnlineData(mOnlineBean); onlineBeanList.addAll(roomOnlineBeanList); updateUserCount(mOnlineBean.getCount()); mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity())); roomOnlineAdapter = new RoomOnlineAdapter(onlineBeanList); 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) { // 使用 post 延迟执行,确保 dismiss 完成后再显示新对话框 mBinding.getRoot().post(() -> { mBinding.getRoot().post(() -> { RoomUserInfoFragment.show(roomId, item.getUser_id() + "", pit_number, getHostUser(hostUser), false, 4, isNumberWhether(), getParentFragmentManager()); }); dismiss(); }); } }); } // 在类中添加以下方法 private void resetRefreshState() { if (mBinding != null && mBinding.srl != null) { mBinding.srl.resetNoMoreData(); } page = 1; } 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) { if (!isValidContext()) { return; } List roomOnlineBeanList = processOnlineData(onlineBean); updateAdapterData(roomOnlineBeanList); updateUserCount(onlineBean.getCount()); } private boolean isValidContext() { return getActivity() != null && mBinding != null; } private List processOnlineData(RoomOnline onlineBean) { List result = new ArrayList<>(); boolean isFirstPage = page <= 1; int typePit = pit_number.isEmpty() ? 1 : 2; // 处理麦上用户 processUserList(onlineBean.getOn_pit(), result, "麦上用户", isFirstPage, 1, 0); // 处理麦下用户 processUserList(onlineBean.getOff_pit(), result, "麦下用户", isFirstPage, 2, typePit); return result; } private void processUserList(List userList, List 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 newData) { if (page == 1) { onlineBeanList.clear(); } onlineBeanList.addAll(newData); roomOnlineAdapter.notifyDataSetChanged(); } private void updateUserCount(int count) { if (mBinding.tvNum != null) { mBinding.tvNum.setText(String.format("用户列表(%d)人", count)); } if (getActivity() instanceof RoomActivity) { ((RoomActivity) getActivity()).setOnlineNumber(count); } } @Override public void onResume() { super.onResume(); // 每次恢复时重置刷新状态 resetRefreshState(); } @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 list) { } @Override public void changeSong() { } @Override public void hostUserPit() { ToastUtils.showShort("抱麦成功"); dismiss(); } @Override public void quitRoom() { } @Override public void quitRoom2(String roomId) { } @Override public void userGuanzSuccess(String s) { } @Override public void acceptPk() { } @Override public void clearUserCharm() { } @Override public void userOnlineStatus(List list) { } @Override public void findRoom() { mBinding.srl.finishRefresh(); mBinding.srl.finishLoadMore(); } @Override public void roomRedPackets(List list) { } }