用户列表首次显示优化。

This commit is contained in:
2025-12-15 18:52:13 +08:00
parent 8dcafa37ba
commit e16878b0cf
11 changed files with 132 additions and 119 deletions

View File

@@ -1,11 +1,12 @@
package com.xscm.moduleutil.bean.room;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@Data
public class RoomOnline {
public class RoomOnline implements Serializable {
private List<RoomOnlineBean> on_pit;//麦上用户
private List<RoomOnlineBean> off_pit;//麦下用户

View File

@@ -2,6 +2,7 @@ package com.xscm.moduleutil.bean.room;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@@ -12,7 +13,7 @@ import lombok.Data;
* @description: 房间在线列表
*/
@Data
public class RoomOnlineBean implements MultiItemEntity {
public class RoomOnlineBean implements MultiItemEntity, Serializable {
private int itemViewType;
private String typeNames;
private int user_id;

View File

@@ -47,6 +47,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
@@ -515,15 +516,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding?.roomTop?.userRecyclerView?.adapter = likeUserAdapter
likeUserAdapter!!.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { adapter, view, position ->
val fragment = RoomOnlineDialogFragment.show(
showUserListDialog(
roomId, "", mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
LogUtils.e("fragment_onItemClickListener: ${(fragment != null)}")
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
}
mBinding!!.ivChat.setOnClickListener { view: View ->
@@ -792,10 +788,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
// 调用退出房间方法
MessageListenerSingleton.quitGroup(roomId);
quit();
if (mRoomInfoResp?.room_info?.label_id != null && mRoomInfoResp?.room_info?.label_id.equals(
"5"
)
) {
if (mRoomInfoResp?.room_info?.label_id != null && mRoomInfoResp?.room_info?.label_id.equals("5")) {
jiaR()
return
} else {
@@ -1019,13 +1012,12 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
Observable.timer(1000, TimeUnit.MILLISECONDS).observeOn(
AndroidSchedulers.mainThread()
).subscribe { aLong: Long? ->
if (ActivityUtils.getTopActivity() is RoomActivity) startActivity(
Intent(
ActivityUtils.getTopActivity(),
TransparentActivity::class.java
)
if (ActivityUtils.getTopActivity() is RoomActivity) {
startActivity(
Intent(ActivityUtils.getTopActivity(), TransparentActivity::class.java)
)
}
}
}
@@ -1938,11 +1930,13 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment?.handleRoomMessage(messageEvent)
}
RoomType.SIGN_CONTRACT -> {
mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] = RoomPitBean(pitNumber)
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment?.handleRoomMessage(messageEvent)
}
else -> {
roomFragment!!.updateSeatViewExchangedWithPitArray(mRoomInfoResp)
}
@@ -2635,13 +2629,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} else if (id == R.id.btn_close_live) { //退出房间
showExitRoomDialog()
} else if (id == R.id.tv_num) {
val fragment = RoomOnlineDialogFragment.show(
showUserListDialog(
roomId, "", mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
} else if (id == R.id.rl) {
MvpPre!!.clearUserCharm(roomId, "")
} else if (id == R.id.ll_input) {
@@ -3903,10 +3894,11 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
return result
}
var mOnlineBean: RoomOnline? = null
// TODO: 根据返回的在线列表获取对应的值,查看是否有在线用户
override fun getRoomOnline(onlineBean: RoomOnline?) {
if (onlineBean != null) {
mOnlineBean = onlineBean
val onlineBeans: MutableList<RoomOnlineBean> = ArrayList()
if (onlineBean.on_pit.size > 0) {
onlineBeans.addAll(onlineBean.on_pit)
@@ -3923,6 +3915,25 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
}
fun showUserListDialog(
roomId: String?,
pitNumber: String?,
mRoomUserBean: RoomUserBean?,
mRoomInfoResp: RoomInfoResp?,
supportFragmentManager: FragmentManager
) {
val fragment = RoomOnlineDialogFragment.show(
roomId, pitNumber,mOnlineBean, mRoomUserBean, mRoomInfoResp,
supportFragmentManager
)
LogUtils.e("fragment_onItemClickListener: ${(fragment != null)}")
if (fragment != null) {
addActiveDialogFragment(fragment) // 添加到管理列表
}
}
override fun applyPit() {
}

View File

@@ -82,6 +82,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
public void applyPit() {
}
public FriendshipRoomFragment() {
}
@@ -93,6 +94,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
FriendshipRoomFragment fragment = new FriendshipRoomFragment(roomInfoResp);
return fragment;
}
@Override
public void endFriend(FriendUserBean friendUserBean) {
if (friendUserBean != null) {
@@ -162,9 +164,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
}
@Override
protected FriendshipRoomPresenter bindPresenter() {
return new FriendshipRoomPresenter(this, getActivity());
@@ -364,7 +363,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
if (((RoomActivity) getActivity()).isFastDoubleClick(roomInfoResp.getUser_info().getUser_id() + "", pitBean.getPit_number())) {
return;
}
RoomOnlineDialogFragment.show(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
((RoomActivity) getActivity()).showUserListDialog(roomId, "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
}
@@ -713,7 +712,9 @@ public class FriendshipRoomFragment extends BaseRoomFragment<FriendshipRoomPrese
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}

View File

@@ -406,7 +406,9 @@ public class RoomAuctionFragment extends BaseMvpFragment<RoomAuctionPresenterTow
if (wheatView2.getUserId() != null) {
if (wheatView2.getUserId().equals("")) {
if ((wheatView.getUserId() != null && wheatView.getUserId().equals(SpUtil.getUserId() + "") || getHostUser() < 4)) {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), 888 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity)getActivity()).showUserListDialog(roomInfoResp.getRoom_info().getRoom_id(), 888 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
if (roomInfoResp.getRoom_auction() != null && roomInfoResp.getRoom_auction().getAuction_user() != null) {

View File

@@ -141,10 +141,12 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
roomPitBean = pitBean;
showPopupMenu(roomJukeboxWheatView); // v 是点击的按钮视图
} else if ((finalI + 1) == 10) {
if (ActivityUtils.getTopActivity() instanceof RoomActivity) {
if (getActivity() instanceof RoomActivity) {
if (((RoomActivity) ActivityUtils.getTopActivity()).getHostUser() < 4) {
if (!isFastDoubleClick("online_dialog", finalI + 1 + "")) {
RoomOnlineDialogFragment.show(roomId, finalI + 1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity)getActivity()).showUserListDialog(roomId, finalI + 1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
@@ -336,7 +338,9 @@ public class RoomJukeboxFragment extends BaseMvpFragment<JukeboxPresenter, Fragm
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}

View File

@@ -432,8 +432,8 @@ public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoom
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), muJb.getUserId(), muJb.pitNumber, getHostUser(), false, 2, isNumberWhether(), getChildFragmentManager());
} else {
if (getActivity() != null && getActivity() instanceof RoomActivity) {
if (((RoomActivity) getActivity()).getHostUser() < 4) {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4) {
((RoomActivity)getActivity()).showUserListDialog(roomInfoResp.getRoom_info().getRoom_id(), "10", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
} else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
}

View File

@@ -11,6 +11,7 @@ import android.widget.TextView
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.LogUtils
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.room.activity.RoomActivity
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.presenter.MentorShipPresenter
import com.xscm.modulemain.databinding.FragmentMentorShipBinding
@@ -168,7 +169,7 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
mRoomInfoResp?.room_info?.pit_list!![indexList[idx].toInt() - 1]
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
(activity as RoomActivity).showUserListDialog(
mRoomId,
mPitBean?.pit_number,
mRoomInfoResp?.user_info,
@@ -300,7 +301,10 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
setIvForMai(0)
}
if (viewList[0].pitBean.user_id.equals(mUserInfo?.user_id.toString()) && !mSignPitBean?.user_id.equals("0")) {
if (viewList[0].pitBean.user_id.equals(mUserInfo?.user_id.toString()) && !mSignPitBean?.user_id.equals(
"0"
)
) {
mBinding.tvTimeLeft.visibility = View.VISIBLE
} else {
mBinding.tvTimeLeft.visibility = View.GONE
@@ -321,6 +325,7 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
"\n mBinding.tvTimeLeft: ${mBinding.tvTimeLeft.visibility == View.VISIBLE}"
)
}
// 核心工具方法:检查 Fragment 是否和 Activity 有效绑定
private fun checkFragmentAttached(): Boolean {
// 依次检查Fragment 是否附加到 Activity、是否已销毁、是否处于正常状态
@@ -645,8 +650,11 @@ class RoomMentorShipFragment(var mRoomInfoResp: RoomInfoResp?) :
tvHugMic.setOnClickListener { v: View? ->
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
mRoomId, mPitBean?.pit_number, mRoomInfoResp?.user_info, mRoomInfoResp,
(activity as RoomActivity).showUserListDialog(
mRoomId,
mPitBean?.pit_number,
mRoomInfoResp?.user_info,
mRoomInfoResp,
childFragmentManager
)
popupWindow!!.dismiss()

View File

@@ -184,9 +184,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
showPopupMenu(view); // v 是点击的按钮视图
} else if (pitNumber1 == 10) {
if (getActivity() != null && getActivity() instanceof RoomActivity){
if (((RoomActivity) getActivity()).getHostUser() < 4){
if (getActivity() != null && ((RoomActivity) getActivity()).getHostUser() < 4){
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
((RoomActivity)getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}else {
com.hjq.toast.ToastUtils.show("请等待主持抱麦");
@@ -338,7 +338,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
tvHugMic.setOnClickListener(v -> {
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if(getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber, roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
popupWindow.dismiss();
});
}
@@ -713,7 +715,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
} else if (pitNumber1 == 10) {
// 添加防重复点击检查
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
MvpPre.applyPit(roomId, pitNumber1 + "");
@@ -782,7 +786,9 @@ public class SingSongFragment extends BaseRoomFragment<SingSongPresenter, Fragme
} else if (pitNumber1 == 10) {
// 添加防重复点击检查
if (!isFastDoubleClick("online_dialog", pitNumber1 + "")) {
RoomOnlineDialogFragment.show(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
if (getActivity() != null && getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).showUserListDialog(roomId, pitNumber1 + "", roomInfoResp.getUser_info(), roomInfoResp, getChildFragmentManager());
}
}
} else {
MvpPre.applyPit(roomId, pitNumber1 + "");

View File

@@ -29,6 +29,7 @@ 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;
@@ -47,18 +48,23 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
private RoomUserBean hostUser;
protected RoomInfoResp roomInfoResp;
private List<RoomOnlineBean> onlineBeanList = new ArrayList<>();
private RoomOnline mOnlineBean;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
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;
@@ -66,7 +72,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
@Override
protected void initData() {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
// MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
@Override
@@ -88,6 +94,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
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");
}
@@ -118,9 +125,11 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
});
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(mOnlineBean);
onlineBeanList.addAll(roomOnlineBeanList);
updateUserCount(mOnlineBean.getCount());
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter(new ArrayList<RoomOnlineBean>());
roomOnlineAdapter = new RoomOnlineAdapter(onlineBeanList);
mBinding.rvComment.setAdapter(roomOnlineAdapter);
roomOnlineAdapter.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() {
@@ -216,41 +225,15 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
return;
}
getActivity().runOnUiThread(() -> {
finishRefreshOrLoad();
if (onlineBean == null) {
handleEmptyData();
return;
}
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(onlineBean);
updateAdapterData(roomOnlineBeanList);
updateUserCount(onlineBean.getCount());
});
}
private boolean isValidContext() {
return getActivity() != null && mBinding != null;
}
private void finishRefreshOrLoad() {
if (mBinding.srl == null) return;
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
private void handleEmptyData() {
if (page <= 1) {
roomOnlineAdapter.setNewData(new ArrayList<>());
} else if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
private List<RoomOnlineBean> processOnlineData(RoomOnline onlineBean) {
List<RoomOnlineBean> result = new ArrayList<>();
@@ -296,13 +279,11 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
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();
if (page == 1) {
onlineBeanList.clear();
}
onlineBeanList.addAll(newData);
roomOnlineAdapter.notifyDataSetChanged();
}
private void updateUserCount(int count) {
@@ -315,11 +296,7 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresente
}
}
// @Override
// public void getRoomOnline(List<RoomOnlineBean> onlineBean) {
// roomOnlineAdapter.setNewData(onlineBean);
// mBinding.tvNum.setText("在线用户("+onlineBean.size()+")人");
// }
@Override
public void onResume() {
super.onResume();

View File

@@ -75,7 +75,7 @@
android:id="@+id/tv_performer_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_3"
android:layout_marginTop="-15dp"
android:text="请点歌"
android:textColor="@color/colorWhite45"
android:textSize="@dimen/sp_12"
@@ -210,7 +210,7 @@
<TextView
android:id="@+id/tv_song"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_36"
android:layout_marginTop="-15dp"
@@ -223,7 +223,9 @@
app:layout_constraintEnd_toEndOf="@+id/im_performer"
app:layout_constraintStart_toStartOf="@+id/im_performer"
app:layout_constraintTop_toBottomOf="@+id/im_performer"
tools:text="演唱歌曲:我的好兄弟" />
android:lines="1"
android:ellipsize="end"
tools:text="演唱歌曲:我的好兄弟我的好兄弟我的好兄弟我的好兄弟我的好兄弟我的好兄弟" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_jukebox"