Files
yusheng-android/moduleroom/src/main/java/com/example/moduleroom/dialog/RoomGiftDialogFragment.java

945 lines
38 KiB
Java
Raw Normal View History

2025-10-20 10:16:44 +08:00
package com.example.moduleroom.dialog;
import android.app.Dialog;
import android.content.Context;
2025-10-24 17:52:11 +08:00
import android.content.Intent;
import android.graphics.Color;
2025-10-20 10:16:44 +08:00
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
2025-10-24 17:52:11 +08:00
import android.util.Log;
import android.util.TypedValue;
2025-10-20 10:16:44 +08:00
import android.view.Gravity;
2025-10-24 17:52:11 +08:00
import android.view.LayoutInflater;
2025-10-20 10:16:44 +08:00
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
2025-10-24 17:52:11 +08:00
import android.view.WindowManager;
import android.widget.TextView;
2025-10-20 10:16:44 +08:00
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
2025-10-24 17:52:11 +08:00
import androidx.fragment.app.FragmentActivity;
2025-10-20 10:16:44 +08:00
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
2025-10-24 17:52:11 +08:00
import androidx.fragment.app.FragmentTransaction;
2025-10-20 10:16:44 +08:00
import androidx.recyclerview.widget.LinearLayoutManager;
2025-10-24 17:52:11 +08:00
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.adapter.FragmentStateAdapter;
2025-10-20 10:16:44 +08:00
import com.alibaba.android.arouter.launcher.ARouter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.GiftUserAdapter;
import com.example.moduleroom.databinding.RoomGiftDialogBinding;
2025-10-24 17:52:11 +08:00
import com.example.moduletablayout.listener.OnTabSelectListener;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
2025-10-20 10:16:44 +08:00
import com.hjq.toast.ToastUtils;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.activity.WebViewActivity;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.adapter.GiftTwoDetailsFragment;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.adapter.MyFragmentPagerAdapter;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.base.BaseMvpDialogFragment;
import com.xscm.moduleutil.bean.GiftLabelBean;
import com.xscm.moduleutil.bean.GiftNumBean;
import com.xscm.moduleutil.bean.GiftPackBean;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.bean.GiftPackEvent;
import com.xscm.moduleutil.bean.GiftPackListCount;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.bean.RewardUserBean;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.bean.RoomTypeModel;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.bean.WalletBean;
import com.xscm.moduleutil.bean.room.RoomAuction;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
import com.xscm.moduleutil.bean.room.RoomPitBean;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.dialog.ConfirmDialog;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.dialog.RechargeDialogFragment;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.dialog.WebViewDialog;
import com.xscm.moduleutil.dialog.giftLottery.GiftLotteryDialog;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.event.GiftDoubleClickEvent;
import com.xscm.moduleutil.event.GiftUserRefreshEvent;
import com.xscm.moduleutil.event.RoomGiftGiveEvent;
import com.xscm.moduleutil.presenter.RewardGiftContacts;
import com.xscm.moduleutil.presenter.RewardGiftPresenter;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.SpUtil;
2025-10-24 17:52:11 +08:00
import com.xscm.moduleutil.utils.SystemUtils;
2025-10-20 10:16:44 +08:00
import com.xscm.moduleutil.widget.dialog.KeyboardPopupWindow;
import com.xscm.moduleutil.widget.dialog.SelectGiftNumPopupWindow;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* @author qx
* @data 2025/6/16
* @description: 送礼物的dialog
*/
public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPresenter, RoomGiftDialogBinding> implements RewardGiftContacts.View {
private GiftUserAdapter gifyuseradapter;
private SelectGiftNumPopupWindow mSelectGiftNumPopupWindow;
private KeyboardPopupWindow mKeyboardPopupWindow;
private List<GiftNumBean> mGiftNumList;
2025-10-24 17:52:11 +08:00
private RoonGiftModel roonGiftModel = new RoonGiftModel();
2025-10-20 10:16:44 +08:00
private GiftPackBean giftModel = null;
private RoomInfoResp roomInfoResp;
private String label_id;
List<RewardUserBean> rewardUserBeanList;
private List<Fragment> fragmentList = new ArrayList<>();
private UserInfo userInfo;
private boolean all = false;
private String roomId;
private final List<String> oldSelectedIds = new LinkedList<>();
private int jingp;//1:是点击的竞拍2是点击的送礼物
2025-10-24 17:52:11 +08:00
private String heart_id = "";//交友房中点击助力需要发送heart_id
private String auction_id;
2025-10-20 10:16:44 +08:00
@Override
protected RewardGiftPresenter bindPresenter() {
return new RewardGiftPresenter(this, getActivity());
}
2025-10-24 17:52:11 +08:00
public static RoomGiftDialogFragment show(RoomInfoResp roomInfoResp, UserInfo userInfo, String roomId, int jingp, String heart_id, FragmentManager fragmentManager) {
2025-10-20 10:16:44 +08:00
RoomGiftDialogFragment dialogFragment = new RoomGiftDialogFragment();
Bundle args = new Bundle();
args.putSerializable("roomInfoResp", roomInfoResp);
args.putSerializable("userInfo", userInfo);
args.putString("roomId", roomId);
2025-10-24 17:52:11 +08:00
args.putInt("jingp", jingp);//竞拍
args.putString("heart_id", heart_id);
2025-10-20 10:16:44 +08:00
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RewardGiftDialogFragment");
2025-10-24 17:52:11 +08:00
return dialogFragment;
2025-10-20 10:16:44 +08:00
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
EventBus.getDefault().register(this);
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
userInfo = (UserInfo) getArguments().getSerializable("userInfo");
roomId = getArguments().getString("roomId");
jingp = getArguments().getInt("jingp");
2025-10-24 17:52:11 +08:00
heart_id = getArguments().getString("heart_id");
2025-10-20 10:16:44 +08:00
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
public void onDestroyView() {
super.onDestroyView();
EventBus.getDefault().unregister(this);
// 清理资源,防止内存泄漏
if (mSelectGiftNumPopupWindow != null) {
mSelectGiftNumPopupWindow.dismiss();
mSelectGiftNumPopupWindow = null;
}
if (mKeyboardPopupWindow != null) {
mKeyboardPopupWindow.dismiss();
mKeyboardPopupWindow = null;
}
if (currentDialog != null) {
currentDialog.dismiss();
currentDialog = null;
}
// 清理适配器引用
if (gifyuseradapter != null) {
gifyuseradapter.setOnItemClickListener(null);
gifyuseradapter = null;
}
// 清理Fragment列表
if (fragmentList != null) {
fragmentList.clear();
fragmentList = null;
}
// 清理其他引用
roomInfoResp = null;
userInfo = null;
rewardUserBeanList = null;
giftLabelBeanList = null;
roonGiftModel = null;
giftModel = null;
2025-10-20 10:16:44 +08:00
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
// 获取屏幕高度
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
// 设置DialogFragment的高度为屏幕高度的70%
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, (int) (height * 0.7));
}
}
@Override
protected void initData() {
// MvpPre.getRewardList("1", 1, 10);
MvpPre.getGiftLabel("1");
MvpPre.wallet();
mGiftNumList = new ArrayList<>();
mGiftNumList.add(new GiftNumBean("20", "x20"));
mGiftNumList.add(new GiftNumBean("15", "x15"));
mGiftNumList.add(new GiftNumBean("10", "x10"));
mGiftNumList.add(new GiftNumBean("5", "x5"));
mGiftNumList.add(new GiftNumBean("1", "x1"));
rewardUserBeanList = new ArrayList<>();
if (roomInfoResp == null) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(userInfo.getUser_id() + "");
rewardUserBean.setNickname(userInfo.getNickname());
rewardUserBean.setAvatar(userInfo.getAvatar());
rewardUserBean.setPit_number(userInfo.getPit_number());
rewardUserBean.setSelect(true);
rewardUserBeanList.add(rewardUserBean);
} else {
rewardUserBeanList = getSortedRewardUserList(roomInfoResp.getRoom_info().getPit_list(), "9", "10");
}
mBinding.rvGiftUser.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
gifyuseradapter = new GiftUserAdapter();
mBinding.rvGiftUser.setAdapter(gifyuseradapter);
gifyuseradapter.setNewData(rewardUserBeanList);
gifyuseradapter.setOnItemClickListener((adapter, view, position) -> {
RewardUserBean item = (RewardUserBean) adapter.getItem(position);
if (item != null) {
item.setSelect(!item.isSelect());
}
// mBinding.tvOneKeyAllGive.setVisibility(currentPage == 1 && giftUserAdapter.getSelectCount() == 1 ?
// View.VISIBLE : View.INVISIBLE);//选中了两个以上麦位,一键送礼隐藏
all = gifyuseradapter.isAll();
if (all) {
mBinding.tvAllWheat.setVisibility(View.GONE);
} else {
mBinding.tvAllWheat.setVisibility(View.VISIBLE);
}
gifyuseradapter.notifyItemChanged(position, item);
oldSelectedIds.clear();
oldSelectedIds.addAll(gifyuseradapter.getAllSelectedIds());
});
}
private List<RewardUserBean> getSortedRewardUserList(List<RoomPitBean> pitList, String... priorityPits) {
List<RewardUserBean> result = new ArrayList<>();
List<RoomPitBean> pitList2 = new ArrayList<>();
List<RoomPitBean> pitList3 = new ArrayList<>();
List<String> added = new ArrayList<>();
2025-10-24 17:52:11 +08:00
if (roomInfoResp.getSong_pit_list() != null && roomInfoResp.getSong_pit_list().size() > 0) {
2025-10-20 10:16:44 +08:00
pitList2.addAll(roomInfoResp.getSong_pit_list());
// 使用 HashSet 进行去重
Set<RoomPitBean> uniquePitSet = new HashSet<>(pitList);
uniquePitSet.addAll(pitList2);
// 将去重后的集合转换回 List
pitList.clear();
pitList.addAll(uniquePitSet);
}
2025-10-24 17:52:11 +08:00
if (roomInfoResp.getRoom_auction() != null) {
if (roomInfoResp.getRoom_auction().getAuction_list() != null && roomInfoResp.getRoom_auction().getAuction_list().size() > 0) {
for (int i = 0; i < roomInfoResp.getRoom_auction().getAuction_list().size(); i++) {
2025-10-20 10:16:44 +08:00
RoomAuction.AuctionListBean auctionListBean = roomInfoResp.getRoom_auction().getAuction_list().get(i);
RoomPitBean pitBean = new RoomPitBean();
pitBean.setUser_id(auctionListBean.getUser_id());
pitBean.setNickname(auctionListBean.getNickname());
pitBean.setAvatar(auctionListBean.getAvatar());
pitBean.setCharm(auctionListBean.getCharm());
pitBean.setPit_number("1111");
pitList3.add(pitBean);
}
// 使用 HashSet 进行去重
Set<RoomPitBean> uniquePitSet = new HashSet<>(pitList);
uniquePitSet.addAll(pitList3);
// 将去重后的集合转换回 List
pitList.clear();
pitList.addAll(uniquePitSet);
}
2025-10-24 17:52:11 +08:00
if (roomInfoResp.getRoom_auction().getAuction_user() != null) {
if (roomInfoResp.getRoom_auction().getAuction_user().getUser_id() != null && !roomInfoResp.getRoom_auction().getAuction_user().getUser_id().equals(SpUtil.getUserId() + "")) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(roomInfoResp.getRoom_auction().getAuction_user().getUser_id());
rewardUserBean.setNickname(roomInfoResp.getRoom_auction().getAuction_user().getNickname());
rewardUserBean.setAvatar(roomInfoResp.getRoom_auction().getAuction_user().getAvatar());
rewardUserBean.setPit_number("888");
result.add(rewardUserBean);
}
}
2025-10-20 10:16:44 +08:00
}
// 优先添加指定麦位
for (String targetPit : priorityPits) {
for (RoomPitBean bean : pitList) {
if (bean.getPit_number().equals(targetPit) &&
!bean.getUser_id().equals("0") && !bean.getUser_id().equals("") &&
2025-10-24 17:52:11 +08:00
!bean.getUser_id().equals(SpUtil.getUserId() + "")) {
2025-10-20 10:16:44 +08:00
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(bean.getUser_id());
rewardUserBean.setNickname(bean.getNickname());
rewardUserBean.setAvatar(bean.getAvatar());
rewardUserBean.setPit_number(bean.getPit_number());
result.add(rewardUserBean);
added.add(bean.getPit_number());
}
}
}
// 添加剩余的
for (RoomPitBean bean : pitList) {
String pitNumber = bean.getPit_number();
if (!added.contains(pitNumber) &&
!bean.getUser_id().equals("0") && !bean.getUser_id().equals("") &&
!bean.getUser_id().equals(SpUtil.getUserId() + "")) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(bean.getUser_id());
rewardUserBean.setNickname(bean.getNickname());
rewardUserBean.setAvatar(bean.getAvatar());
rewardUserBean.setPit_number(bean.getPit_number());
result.add(rewardUserBean);
}
}
2025-10-24 17:52:11 +08:00
List<RewardUserBean> uniquePitSet = removeDuplicateByUserId(result);
result.clear();
result.addAll(uniquePitSet);
2025-10-20 10:16:44 +08:00
return result;
}
2025-10-24 17:52:11 +08:00
// TODO: 2025/9/15 去重
private List<RewardUserBean> removeDuplicateByUserId(List<RewardUserBean> list) {
Set<String> userIdSet = new HashSet<>();
List<RewardUserBean> uniqueList = new ArrayList<>();
for (RewardUserBean bean : list) {
if (bean != null && bean.getUser_id() != null && !userIdSet.contains(bean.getUser_id())) {
userIdSet.add(bean.getUser_id());
uniqueList.add(bean);
}
}
return uniqueList;
}
2025-10-20 10:16:44 +08:00
@Override
protected void initView() {
// mBinding.rvGiftUser.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
// adapter = new BaseQuickAdapter<RewardUserBean, BaseViewHolder>(com.qxcm.moduleutil.R.layout.item_reward, null) {
// @Override
// protected void convert(BaseViewHolder helper, RewardUserBean item) {
// ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(com.qxcm.moduleutil.R.id.im_reward));
// }
// };
mBinding.tvGiveCoinNum.setOnClickListener(this::onClisk);
mBinding.tvGive.setOnClickListener(this::onClisk);
mBinding.cz.setOnClickListener(this::onClisk);
mBinding.tvAllWheat.setOnClickListener(this::onClisk);
float[] corners = {0f, 65f, 65f, 0f};
2025-10-24 17:52:11 +08:00
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.tvGive, ColorManager.getInstance().getPrimaryColorInt(), corners);
2025-10-20 10:16:44 +08:00
mBinding.tvGive.setTextColor(ColorManager.getInstance().getButtonColorInt());
mBinding.cz.setTextColor(ColorManager.getInstance().getPrimaryColorInt());
2025-10-24 17:52:11 +08:00
ViewGroup.LayoutParams layoutParams = mBinding.llGiftRule.getLayoutParams();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; // 使用你定义的getWidth方法
layoutParams.height = SystemUtils.getWidth(64); // 示例高度
mBinding.llGiftRule.setLayoutParams(layoutParams);
float[] corners2 = {56f, 56f, 56f, 56f};
ThemeableDrawableUtils.setThemeableRoundedBackground(mBinding.tvBbQs, ColorManager.getInstance().getPrimaryColorInt(), corners2);
mBinding.tvBbQs.setTextColor(ColorManager.getInstance().getButtonColorInt());
mBinding.tvBbQs.setOnClickListener(this::onClisk);
2025-10-20 10:16:44 +08:00
}
private void onClisk(View view1) {
if (view1.getId() == R.id.tv_give_coin_num) {
if (mSelectGiftNumPopupWindow == null) {
mSelectGiftNumPopupWindow = new SelectGiftNumPopupWindow(getSelfActivity(), (adapter, view, position) -> {
GiftNumBean giftNumBean = (GiftNumBean) adapter.getItem(position);
if ("0".equals(giftNumBean.getNumber())) {//自定义
mKeyboardPopupWindow = new KeyboardPopupWindow(getSelfActivity(), getView());
mKeyboardPopupWindow.refreshKeyboardOutSideTouchable(false);//false开启键盘 true关闭键盘
mKeyboardPopupWindow.addRoomPasswordListener(new KeyboardPopupWindow.KeyboardCompleteListener() {//监听自定键盘的完成
@Override
public void inputComplete(String inputContent) {
mBinding.tvGiveCoinNum.setText(inputContent);
mKeyboardPopupWindow.releaseResources();
}
});
} else {
mBinding.tvGiveCoinNum.setText(giftNumBean.getText());
}
mSelectGiftNumPopupWindow.dismiss();
});
}
mSelectGiftNumPopupWindow.setData(mGiftNumList);
2025-10-24 17:52:11 +08:00
mSelectGiftNumPopupWindow.showAtLocation(mBinding.tvGiveCoinNum, Gravity.BOTTOM | Gravity.RIGHT, 100, 190);
2025-10-20 10:16:44 +08:00
} else if (view1.getId() == R.id.tv_give) {
for (int i = 0; i < mGiftNumList.size(); i++) {
if (mBinding.tvGiveCoinNum.getText().toString().equals(mGiftNumList.get(i).getText())) {
giftNumber = mGiftNumList.get(i).getNumber();
}
}
2025-10-24 17:52:11 +08:00
if (packType == 1) {
giveGift(giftNumber);
} else {
giveGift(giftNumber);
}
2025-10-20 10:16:44 +08:00
} else if (view1.getId() == R.id.cz) {
2025-10-24 17:52:11 +08:00
RechargeDialogFragment.show(roomId, null, getActivity().getSupportFragmentManager(),"","");
dismiss();
2025-10-20 10:16:44 +08:00
} else if (view1.getId() == R.id.tv_all_wheat) {//全麦
if (all) {
gifyuseradapter.allElection(false);
// mBinding.tvAllWheat.setVisibility(View.VISIBLE);
} else {
gifyuseradapter.allElection(true);
// mBinding.tvAllWheat.setVisibility(View.GONE);
}
all = !all;
oldSelectedIds.clear();
oldSelectedIds.addAll(gifyuseradapter.getAllSelectedIds());
2025-10-24 17:52:11 +08:00
} else if (view1.getId() == R.id.tv_bb_qs) {
int count = gifyuseradapter.getSelectCount();
if (count <=0) {
ToastUtils.show("请选择打赏的用户");
return;
}
if (gifyuseradapter.getUserIdCount() > 1) {
ToastUtils.show("一键全送只能选择一个用户");
return;
}
if (userInfo != null) {
if (userInfo.getAuction_id() != null) {
auction_id =userInfo.getAuction_id();
} else {
auction_id = "";
}
}
queren();
2025-10-20 10:16:44 +08:00
}
}
2025-10-24 17:52:11 +08:00
private void queren() {
// 创建并显示确认对话框
new ConfirmDialog(getActivity(),
"提示",
"是否确认将背包礼物全部送出?",
"确认",
"取消",
v -> {
// 点击“确认”按钮时执行删除操作
MvpPre.getGiftPack(roomId, gifyuseradapter.getUserIdToString(), heart_id, auction_id);
},
v -> {
// 点击“取消”按钮时什么都不做
}, false, 0).show();
}
2025-10-20 10:16:44 +08:00
private String giftNumber = "";
private RoomGiftGiveEvent roomGiftGiveEvent;
2025-10-24 17:52:11 +08:00
int packType;
2025-10-20 10:16:44 +08:00
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftDoubleClickEvent(GiftDoubleClickEvent event) {
getSelectedGift();
2025-10-24 17:52:11 +08:00
packType = 1;
2025-10-20 10:16:44 +08:00
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void userRefresh(GiftUserRefreshEvent event) {
2025-10-24 17:52:11 +08:00
if (event.gift == null || event.gift.getRule() == null) {
2025-10-20 10:16:44 +08:00
mBinding.llGiftRule.setVisibility(View.GONE);
} else {
2025-10-24 17:52:11 +08:00
if (event.gift.getActivities_id() == 5) {
showGiftLotteryDialog(event.gift, roomId);
return;
}
2025-10-20 10:16:44 +08:00
mBinding.llGiftRule.setVisibility(View.VISIBLE);
setGiftDetail(event.gift);
}
2025-10-24 17:52:11 +08:00
if (event.addSelf) {
roonGiftModel = event.gift;
}
}
private GiftLotteryDialog currentDialog;
private void showGiftLotteryDialog(RoonGiftModel gift, String roomId) {
String userId = gifyuseradapter.getUserIdToString();
if (userId == null || userId.isEmpty()) {
ToastUtils.show("请先选择人员");
gift.setChecked(false);
return;
}
// this.dismiss();
// FragmentManager fm = getParentFragmentManager();
// GiftLotteryDialog newDialog = GiftLotteryDialog.newInstance(gift.getGift_bag() + "", roomId, userId);
// newDialog.show(fm, "GiftLotteryDialog");
try {
// 直接显示对话框,移除有问题的 FragmentTransaction
this.dismissAllowingStateLoss(); // 使用 dismissAllowingStateLoss 更安全
FragmentManager fm = getParentFragmentManager();
if (fm != null && !fm.isDestroyed()) {
if (jingp==1){
auction_id= userInfo.getAuction_id() ;
}
if (auction_id==null || auction_id.isEmpty()){
auction_id="";
}
GiftLotteryDialog newDialog = GiftLotteryDialog.newInstance(
String.valueOf(gift.getGift_bag()), roomId, userId, heart_id,auction_id);
newDialog.show(fm, "GiftLotteryDialog");
}
} catch (Exception e) {
Log.e("RoomGiftDialogFragment", "Error in showGiftLotteryDialog", e);
ToastUtils.show("操作失败,请重试");
}
// 如果当前dialog存在且正在显示先关闭
// if (currentDialog != null && currentDialog.isVisible()) {
// currentDialog.dismiss();
2025-10-20 10:16:44 +08:00
// }
2025-10-24 17:52:11 +08:00
// currentDialog = GiftLotteryDialog.newInstance(gift.getGift_bag()+"", roomId, userId);
// currentDialog.show(getChildFragmentManager(), "GiftLotteryDialog");
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
2025-10-20 10:16:44 +08:00
public void setGiftDetail(RoonGiftModel giftDetailResp) {
if (giftDetailResp == null) {
return;
}
mBinding.tvTitle.setText(giftDetailResp.getGift_bag_name());
mBinding.tvIntroduce.setText(giftDetailResp.getRule());
mBinding.ivWf.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
2025-10-24 17:52:11 +08:00
// ARouter.getInstance().build(ARouteConstants.H5).withString("url", giftDetailResp.getRule_url()).withString("title", "盲盒规则").navigation();
Intent intent = new Intent(getActivity(), WebViewActivity.class);
intent.putExtra("url", giftDetailResp.getRule_url());
intent.putExtra("title", "盲盒规则");
startActivity(intent);
2025-10-20 10:16:44 +08:00
}
});
}
private int getSelectedGift() {
int currentItem = mBinding.viewPager.getCurrentItem();
// 增加边界检查
if (fragmentList == null || currentItem < 0 || currentItem >= fragmentList.size()) {
return currentItem;
}
if (currentItem < 1) { //比1小的是背包
GiftTwoDetailsFragment fragment = (GiftTwoDetailsFragment) fragmentList.get(currentItem);
if (fragment != null && giftModel == null) {
giftModel = fragment.mGiftList();
}
} else {
GiftTwoDetailsFragment fragment = (GiftTwoDetailsFragment) fragmentList.get(currentItem);
if (fragment != null && roonGiftModel == null) {
roonGiftModel = fragment.getGiftList();
}
}
return currentItem;
}
private void giveGift(String num) {
getSelectedGift();
int currentItem = mBinding.viewPager.getCurrentItem();
String userId = gifyuseradapter.getUserIdToString();
String pit = gifyuseradapter.getUserPitToString();
2025-10-24 17:52:11 +08:00
// if (currentItem < 1) {
// if (giftModel == null) {
// ToastUtils.show("请选择礼物");
// return;
// }
// int count = gifyuseradapter.getSelectCount();
// if (count <= 0) {
// ToastUtils.show("请选择打赏对象");
// return;
// }
//
// if (TextUtils.isEmpty(num)) {
// ToastUtils.show("请选择打赏礼物数量");
// return;
// }
// if (Integer.valueOf(num) <= 0) {
// ToastUtils.show("请选择打赏礼物数量");
// return;
// }
// } else {
if (roonGiftModel == null|| roonGiftModel.getGift_id() == null) {
ToastUtils.show("请选择礼物");
return;
}
int count = gifyuseradapter.getSelectCount();
if (count <= 0) {
ToastUtils.show("请选择打赏对象");
return;
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
if (TextUtils.isEmpty(num)) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
if (Integer.valueOf(num) <= 0) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
// }
if (roonGiftModel != null && roonGiftModel.getGift_id() != null) {
if (currentItem != 0) {
//礼物打赏
giftNumber = num;
if (userInfo != null) {
if (userInfo.getPit_number() != null) {
if (userInfo.getPit_number().equals("888") || userInfo.getPit_number().equals("")) {
if (userInfo.getPit_number().isEmpty() || jingp != 1) {
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, "");
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit, "");
} else {
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, userInfo.getAuction_id());
EventBus.getDefault().post(roomGiftGiveEvent);
roomGiftGiveEvent = null;
MvpPre.roomAuctionJoin(userInfo.getAuction_id(), userInfo.getUser_id() + "", roonGiftModel.getGift_id(), num, "1");
dismiss();
}
2025-10-20 10:16:44 +08:00
} else {
2025-10-24 17:52:11 +08:00
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, "");
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit, heart_id);
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
} else {
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, "");
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit, "");
2025-10-20 10:16:44 +08:00
}
} else {
2025-10-24 17:52:11 +08:00
if (all) {
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", null, "");
} else {
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit, "");
}
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, "");
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
} else if (currentItem == 0) {
if (userInfo==null){
giftNumber = num;
beibaoId = roonGiftModel.getGift_id();
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "2", pit, heart_id);
return;
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
if ( userInfo.getPit_number()!=null&& userInfo.getPit_number().equals("888") || userInfo.getPit_number().equals("")) {
if (userInfo.getPit_number().isEmpty() || jingp != 1) {
giftNumber = num;
beibaoId = roonGiftModel.getGift_id();
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "2", pit, heart_id);
}else {
beibaoId = roonGiftModel.getGift_id();
MvpPre.roomAuctionJoin(userInfo.getAuction_id(), userInfo.getUser_id() + "", roonGiftModel.getGift_id(), num, "2");
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel, heart_id, userInfo.getAuction_id());
EventBus.getDefault().post(roomGiftGiveEvent);
roomGiftGiveEvent = null;
// dismiss();
}
} else{
giftNumber = num;
beibaoId = roonGiftModel.getGift_id();
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "2", pit, heart_id);
}
} else {
//背包礼物打赏
2025-10-20 10:16:44 +08:00
// giftNumber = num;
// roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 1, giftModel, null);
//
// MvpPre.giveBackGift(userId, giftModel.getGift_id(), roomId, pit, num, giftModel, 1);
2025-10-24 17:52:11 +08:00
}
} else {
ToastUtils.show("数据错误");
dismiss();
2025-10-20 10:16:44 +08:00
}
}
2025-10-24 17:52:11 +08:00
private String beibaoId;
2025-10-20 10:16:44 +08:00
@Override
protected int getLayoutId() {
return R.layout.room_gift_dialog;
}
@Override
public void getRewardList(List<RewardUserBean> rewardUserBeanList) {
if (rewardUserBeanList != null && !rewardUserBeanList.isEmpty()) {
mBinding.rvGiftUser.setVisibility(View.VISIBLE);
int limit = Math.min(rewardUserBeanList.size(), 6);
List<RewardUserBean> limitedList = rewardUserBeanList.subList(0, limit);
gifyuseradapter.setNewData(limitedList);
} else {
gifyuseradapter.setNewData(null);
mBinding.rvGiftUser.setVisibility(View.INVISIBLE);
}
}
2025-10-24 17:52:11 +08:00
private List<GiftLabelBean> giftLabelBeanList;
2025-10-20 10:16:44 +08:00
@Override
public void getGiftLabel(List<GiftLabelBean> giftLabelBeans) {
2025-10-24 17:52:11 +08:00
giftLabelBeanList = new ArrayList<>();
giftLabelBeanList.addAll(giftLabelBeans);
2025-10-20 10:16:44 +08:00
GiftLabelBean giftLabelBean = new GiftLabelBean();
giftLabelBean.setId("0");
giftLabelBean.setName("背包");
giftLabelBeans.add(0, giftLabelBean);
2025-10-24 17:52:11 +08:00
mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), giftLabelBeans, fragmentList, roomId));
2025-10-20 10:16:44 +08:00
mBinding.viewPager.setOffscreenPageLimit(0);
mBinding.slidingTabLayout.setViewPager(mBinding.viewPager);
mBinding.slidingTabLayout.setCurrentTab(1);
2025-10-24 17:52:11 +08:00
refreshCurrentGiftFragment(giftLabelBeans.get(1).getId(),1,roomId);
mBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// 当页面切换时,控制 tv_bb_qs 按钮的显示
updateTvBbQsVisibility(position);
refreshCurrentGiftFragment(giftLabelBeans.get(position).getId(),1,roomId);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
// 初始化时设置按钮可见性
updateTvBbQsVisibility(1);
}
// 调用示例
private void refreshCurrentGiftFragment(String id,int type,String roomId) {
if (getCurrentGiftFragment()!=null){
getCurrentGiftFragment().loadDataIfNeeded(id,type,roomId);
}
}
private GiftTwoDetailsFragment getCurrentGiftFragment() {
int currentPosition = mBinding.viewPager.getCurrentItem();
// 使用 ViewPager 的 adapter 获取当前 fragment
MyFragmentPagerAdapter adapter = (MyFragmentPagerAdapter) mBinding.viewPager.getAdapter();
if (adapter != null) {
// 直接从 adapter 获取 fragment
Fragment fragment = adapter.getItem(currentPosition);
if (fragment instanceof GiftTwoDetailsFragment) {
return (GiftTwoDetailsFragment) fragment;
}
}
return null;
}
// 控制 tv_bb_qs 按钮显示的方法
private void updateTvBbQsVisibility(int currentPosition) {
// 假设你希望在特定位置例如位置1显示按钮
if (currentPosition == 0) { // 根据你的需求调整位置
// 显示按钮
if (mBinding.tvBbQs != null) {
mBinding.tvBbQs.setVisibility(View.VISIBLE);
mBinding.cz.setVisibility(View.GONE);
MvpPre.getGiftPackListCount();
}
} else {
// 隐藏按钮
if (mBinding.tvBbQs != null) {
mBinding.tvBbQs.setVisibility(View.GONE);
mBinding.cz.setVisibility(View.VISIBLE);
MvpPre.wallet();
}
}
2025-10-20 10:16:44 +08:00
}
@Override
public void setGiftList(List<RoonGiftModel> roonGiftModels, int type) {
}
@Override
public void giveGift() {
// dismiss();
2025-10-24 17:52:11 +08:00
if (mBinding.viewPager.getCurrentItem() == 0) {
MvpPre.getGiftPackListCount();
GiftPackEvent giftPackEvent = new GiftPackEvent();
giftPackEvent.setBdid(beibaoId);
EventBus.getDefault().post(giftPackEvent);
return;
}
2025-10-20 10:16:44 +08:00
if (roomGiftGiveEvent != null) {
EventBus.getDefault().post(roomGiftGiveEvent);
roomGiftGiveEvent = null;
dismiss();
2025-10-24 17:52:11 +08:00
return;
2025-10-20 10:16:44 +08:00
}
2025-10-24 17:52:11 +08:00
dismiss();
2025-10-20 10:16:44 +08:00
}
@Override
public void wallet(WalletBean walletBean) {
mBinding.tvRewardGift.setText(walletBean.getCoin());
}
@Override
public void reward_zone() {
com.blankj.utilcode.util.ToastUtils.showShort("打赏成功");
}
@Override
public void roomAuctionJoin(RoomAuction.AuctionListBean auctionListBean) {
2025-10-24 17:52:11 +08:00
// com.blankj.utilcode.util.ToastUtils.showShort("竞拍成功");
if (roomGiftGiveEvent != null) {
EventBus.getDefault().post(roomGiftGiveEvent);
roomGiftGiveEvent = null;
// dismiss();
}
if (mBinding.viewPager.getCurrentItem()==0) {
GiftPackEvent giftPackEvent = new GiftPackEvent();
giftPackEvent.setBdid(beibaoId);
EventBus.getDefault().post(giftPackEvent);
MvpPre.getGiftPackListCount();
}
// dismiss();
2025-10-20 10:16:44 +08:00
}
@Override
public void giftPack(List<GiftPackBean> giftPackBean) {
}
2025-10-24 17:52:11 +08:00
@Override
public void getGiftPack(String s) {
if (s != null) {
com.hjq.toast.ToastUtils.show(s);
dismiss();
} else {
com.hjq.toast.ToastUtils.show("一键全清背包礼物失败");
}
}
@Override
public void getGiftPackListCount(GiftPackListCount giftPackListCount) {
if (giftPackListCount != null){
mBinding.tvRewardGift.setText(giftPackListCount.getCount());
}
}
private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
2025-10-20 10:16:44 +08:00
private List<GiftLabelBean> list;
private List<Fragment> fragmentList;
2025-10-24 17:52:11 +08:00
private String roomId;
2025-10-20 10:16:44 +08:00
2025-10-24 17:52:11 +08:00
public MyFragmentPagerAdapter(FragmentManager fm, List<GiftLabelBean> list, List<Fragment> fragmentList, String roomId) {
2025-10-20 10:16:44 +08:00
super(fm);
2025-10-24 17:52:11 +08:00
this.list = list != null ? list : new ArrayList<>();
// 不直接使用传入的 fragmentList而是创建一个新的列表
this.fragmentList = new ArrayList<>();
// 初始化 fragmentList 的大小,用 null 填充
for (int i = 0; i < this.list.size(); i++) {
this.fragmentList.add(null);
}
this.roomId = roomId;
2025-10-20 10:16:44 +08:00
}
@Override
public Fragment getItem(int position) {
2025-10-24 17:52:11 +08:00
// 边界检查
if (position < 0 || list == null || position >= list.size()) {
return null;
}
// 检查该位置是否已经有 Fragment 实例
if (position < fragmentList.size() && fragmentList.get(position) != null) {
return fragmentList.get(position);
}
// 创建新的 Fragment
2025-10-20 10:16:44 +08:00
GiftLabelBean model = list.get(position);
2025-10-24 17:52:11 +08:00
Fragment fragment = GiftTwoDetailsFragment.newInstance(model.getId(), 1, roomId);
// 确保 fragmentList 有足够的空间
while (fragmentList.size() <= position) {
fragmentList.add(null);
}
// 在指定位置设置 Fragment 实例
fragmentList.set(position, fragment);
2025-10-20 10:16:44 +08:00
return fragment;
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
2025-10-24 17:52:11 +08:00
if (list == null || position < 0 || position >= list.size()) {
return null;
}
2025-10-20 10:16:44 +08:00
GiftLabelBean model = list.get(position);
return model.getName();
}
}
}