1:完成挚友功能
2:添加在送特定礼物展示弹框功能 3:修改部分图片格式变成wedp 4:用户主页添加礼物墙和挚友
This commit is contained in:
@@ -8,6 +8,9 @@ import android.view.ViewGroup;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.xscm.modulemain.R;
|
||||
import com.xscm.modulemain.databinding.ItemRequestedSongBinding;
|
||||
import com.xscm.moduleutil.bean.SongPlaylist;
|
||||
import com.xscm.moduleutil.utils.ImageUtils;
|
||||
@@ -18,22 +21,15 @@ import java.util.List;
|
||||
/**
|
||||
* 已点歌曲列表适配器
|
||||
*/
|
||||
public class RequestedSongsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
public class RequestedSongsAdapter extends BaseQuickAdapter<SongPlaylist.SongPlaylistBean, BaseViewHolder> {
|
||||
|
||||
// 歌曲状态常量
|
||||
public static final int STATUS_PLAYING = 1; // 正在播放
|
||||
public static final int STATUS_PENDING = 2; // 等待播放
|
||||
public static final int STATUS_TOP = 3; // 置顶
|
||||
|
||||
// 列表项类型
|
||||
private static final int TYPE_NORMAL = 0; // 普通列表项
|
||||
private static final int TYPE_FOOTER = 1; // 底部加载更多项
|
||||
|
||||
private List<SongPlaylist.SongPlaylistBean> songList = new ArrayList<>();
|
||||
private boolean isShowFooter = false; // 是否显示底部加载更多
|
||||
|
||||
private OnItemClickListener onItemClickListener;
|
||||
|
||||
public RequestedSongsAdapter() {
|
||||
super(R.layout.item_requested_song);
|
||||
}
|
||||
|
||||
public interface OnItemClickListener {
|
||||
void onPlayClick(SongPlaylist.SongPlaylistBean song, int position);
|
||||
|
||||
@@ -44,166 +40,32 @@ public class RequestedSongsAdapter extends RecyclerView.Adapter<RecyclerView.Vie
|
||||
this.onItemClickListener = listener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
// 创建普通列表项视图
|
||||
ItemRequestedSongBinding binding = ItemRequestedSongBinding.inflate(
|
||||
LayoutInflater.from(parent.getContext()), parent, false);
|
||||
return new SongViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof FooterViewHolder) {
|
||||
// 底部加载更多项,不需要处理
|
||||
return;
|
||||
}
|
||||
|
||||
if (holder instanceof SongViewHolder) {
|
||||
// 普通列表项
|
||||
SongViewHolder songHolder = (SongViewHolder) holder;
|
||||
|
||||
// 检查位置是否有效,防止索引越界
|
||||
if (position >= songList.size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
SongPlaylist.SongPlaylistBean song = songList.get(position);
|
||||
|
||||
// 设置歌曲信息
|
||||
songHolder.binding.tvSongName.setText(song.getSong_name());
|
||||
ImageUtils.loadHead(song.getBase_image(), songHolder.binding.ivSongCover);
|
||||
songHolder.binding.tvSinger.setText("演唱者:" + song.getSinger_nickname());
|
||||
songHolder.binding.tvRequestBos.setText("老板:" + song.getBoss_nickname());
|
||||
|
||||
// 根据位置显示不同的UI
|
||||
if (position == 0) {
|
||||
// 第一个是正在播放
|
||||
songHolder.binding.tvRequestStatus.setText("正在播放");
|
||||
songHolder.binding.tvRequestStatus.setTextColor(0xFF3ABC6D);
|
||||
songHolder.binding.tvRequestStatus.setBackgroundColor(android.graphics.Color.TRANSPARENT);
|
||||
} else {
|
||||
// 第三个以后都是置顶,文字是白色的
|
||||
songHolder.binding.tvRequestStatus.setText("置顶");
|
||||
songHolder.binding.tvRequestStatus.setTextColor(0xFFFFFFFF);
|
||||
songHolder.binding.tvRequestStatus.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r34_3abc6d);
|
||||
}
|
||||
|
||||
|
||||
// 设置tvRequestStatus的点击事件,只有置顶状态才能点击
|
||||
songHolder.binding.tvRequestStatus.setOnClickListener(v -> {
|
||||
// 只有第三个及以后的项目(position > 1)才能点击tvRequestStatus
|
||||
if (position > 1 && onItemClickListener != null) {
|
||||
onItemClickListener.onTopClick(song, position);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
// 如果是最后一项且需要显示底部加载更多,则返回底部类型
|
||||
if (position == songList.size() && isShowFooter) {
|
||||
return TYPE_FOOTER;
|
||||
}
|
||||
return TYPE_NORMAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
// 如果需要显示底部加载更多,则数量加1
|
||||
return songList.size() + (isShowFooter ? 1 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据歌曲对象获取状态
|
||||
*/
|
||||
private int getStatusFromSong(SongPlaylist.SongPlaylistBean song) {
|
||||
// 根据业务逻辑判断状态,这里仅作为示例
|
||||
if ("1".equals(song.getStatus())) {
|
||||
return STATUS_PLAYING;
|
||||
} else if ("0".equals(song.getStatus())) {
|
||||
return STATUS_TOP;
|
||||
protected void convert(@NonNull BaseViewHolder helper, SongPlaylist.SongPlaylistBean item) {
|
||||
helper.setText(R.id.tv_song_name, item.getSong_name());
|
||||
helper.setText(R.id.tv_singer, "演唱者:" + item.getSinger_nickname());
|
||||
helper.setText(R.id.tv_request_bos, "老板:" + item.getBoss_nickname());
|
||||
ImageUtils.loadHead(item.getBase_image(), helper.getView(R.id.iv_song_cover));
|
||||
// 根据位置显示不同的UI
|
||||
if (helper.getLayoutPosition() == 0) {
|
||||
// 第一个是正在播放
|
||||
helper.setText(R.id.tv_request_status, "正在播放");
|
||||
helper.setTextColor(R.id.tv_request_status, 0xFF3ABC6D);
|
||||
helper.setBackgroundRes(R.id.tv_request_status, android.graphics.Color.TRANSPARENT);
|
||||
} else {
|
||||
return STATUS_PENDING;
|
||||
// 第三个以后都是置顶,文字是白色的
|
||||
helper.setText(R.id.tv_request_status, "置顶");
|
||||
helper.setTextColor(R.id.tv_request_status, 0xFFFFFFFF);
|
||||
helper.setBackgroundRes(R.id.tv_request_status, com.xscm.moduleutil.R.drawable.bg_r34_3abc6d);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置歌曲列表
|
||||
*/
|
||||
public void setSongList(List<SongPlaylist.SongPlaylistBean> list) {
|
||||
if (list != null) {
|
||||
this.songList.clear();
|
||||
this.songList.addAll(list);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加歌曲列表(用于加载更多)
|
||||
*/
|
||||
public void addSongList(List<SongPlaylist.SongPlaylistBean> list) {
|
||||
if (list != null) {
|
||||
int startPos = this.songList.size();
|
||||
this.songList.addAll(list);
|
||||
notifyItemRangeInserted(startPos, list.size());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示或隐藏底部加载更多
|
||||
*/
|
||||
public void setShowFooter(boolean showFooter) {
|
||||
boolean wasShowing = this.isShowFooter;
|
||||
this.isShowFooter = showFooter;
|
||||
|
||||
if (wasShowing != showFooter) {
|
||||
if (showFooter) {
|
||||
notifyItemInserted(songList.size());
|
||||
} else {
|
||||
notifyItemRemoved(songList.size());
|
||||
// 设置tvRequestStatus的点击事件,只有置顶状态才能点击
|
||||
helper.getView(R.id.tv_request_status).setOnClickListener(v -> {
|
||||
// 只有第三个及以后的项目(position > 1)才能点击tvRequestStatus
|
||||
if (helper.getLayoutPosition() > 1 && onItemClickListener != null) {
|
||||
onItemClickListener.onTopClick(item, helper.getLayoutPosition());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空列表
|
||||
*/
|
||||
public void clear() {
|
||||
this.songList.clear();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定位置的歌曲
|
||||
*/
|
||||
public SongPlaylist.SongPlaylistBean getItem(int position) {
|
||||
if (position >= 0 && position < songList.size()) {
|
||||
return songList.get(position);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 普通列表项ViewHolder
|
||||
*/
|
||||
static class SongViewHolder extends RecyclerView.ViewHolder {
|
||||
ItemRequestedSongBinding binding;
|
||||
|
||||
public SongViewHolder(@NonNull ItemRequestedSongBinding binding) {
|
||||
super(binding.getRoot());
|
||||
this.binding = binding;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 底部加载更多ViewHolder
|
||||
*/
|
||||
static class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
public FooterViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,9 +72,9 @@ public class RelationshipFragment extends BaseMvpDialogFragment<RoomUserPresente
|
||||
adapter = new RelationshipAdapter();
|
||||
mBinding.rvHostList.setAdapter(adapter);
|
||||
adapter.setOnItemClickListener((RelationshipAdapter.OnItemClickListener) (view, data, position) -> {
|
||||
if (view.getId() == R.id.im_zhid) {
|
||||
if (view.getId() == R.id.icon_cp_zd) {
|
||||
queren(1, data.getId(), "");
|
||||
} else if (view.getId() == R.id.im_shanchu) {
|
||||
} else if (view.getId() == R.id.icon_cp_dele) {
|
||||
queren(2, data.getId(), data.getDelete_me_coin());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -24,7 +24,9 @@ import com.xscm.moduleutil.bean.SingerSongCount;
|
||||
import com.xscm.moduleutil.bean.SongPlaylist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 已点歌曲页面Fragment
|
||||
@@ -130,34 +132,57 @@ public class RequestedSongsFragment extends BaseMvpFragment<RequestSongPresenter
|
||||
|
||||
@Override
|
||||
public void singerSongList(SongPlaylist s) {
|
||||
// 这个方法似乎是处理单个歌曲的,我们可能需要另一个方法处理列表
|
||||
// 这个方法处理歌曲列表数据,并过滤重复数据
|
||||
|
||||
if (s != null &&s.getLists()!=null && s.getLists().size() > 0 ) {
|
||||
if (s != null && s.getLists() != null && s.getLists().size() > 0) {
|
||||
// 判断当前是刷新还是加载更多
|
||||
RefreshState state = mBinding.smartRefreshLayout.getState();
|
||||
|
||||
if (state == RefreshState.Refreshing) {
|
||||
// 刷新,清空列表并添加新数据
|
||||
songList.clear();
|
||||
songList.addAll(s.getLists());
|
||||
adapter.setSongList(songList);
|
||||
adapter.setNewData(songList);
|
||||
mBinding.smartRefreshLayout.finishRefresh(true);
|
||||
} else if (state == RefreshState.Loading) {
|
||||
// 加载更多,添加数据到列表
|
||||
// 加载更多,过滤重复数据后添加到列表
|
||||
if (s.getLists().size() > 0) {
|
||||
songList.addAll(s.getLists());
|
||||
adapter.addSongList(songList);
|
||||
adapter.setShowFooter(true);
|
||||
mBinding.smartRefreshLayout.finishLoadMore(true);
|
||||
// 创建一个集合存储现有歌曲的ID,用于快速查找
|
||||
Set<Integer> existingSongIds = new HashSet<>();
|
||||
for (SongPlaylist.SongPlaylistBean song : songList) {
|
||||
if (song.getId() != 0) {
|
||||
existingSongIds.add(song.getId());
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤掉已存在的歌曲
|
||||
List<SongPlaylist.SongPlaylistBean> newSongs = new ArrayList<>();
|
||||
for (SongPlaylist.SongPlaylistBean song : s.getLists()) {
|
||||
if (song.getId() != 0 && !existingSongIds.contains(song.getId())) {
|
||||
newSongs.add(song);
|
||||
existingSongIds.add(song.getId()); // 添加到已存在集合中,防止本次加载的数据内部重复
|
||||
}
|
||||
}
|
||||
|
||||
// 只有当有新数据时才更新
|
||||
if (!newSongs.isEmpty()) {
|
||||
songList.addAll(newSongs);
|
||||
adapter.addData(songList);
|
||||
mBinding.smartRefreshLayout.finishLoadMore(true);
|
||||
} else {
|
||||
// 没有新数据,但不算加载失败
|
||||
mBinding.smartRefreshLayout.finishLoadMore(true);
|
||||
}
|
||||
} else {
|
||||
// 没有更多数据
|
||||
adapter.setShowFooter(false);
|
||||
// adapter.setShowFooter(false);
|
||||
mBinding.smartRefreshLayout.finishLoadMoreWithNoMoreData();
|
||||
}
|
||||
} else {
|
||||
// 首次加载
|
||||
songList.clear();
|
||||
songList.addAll(s.getLists());
|
||||
adapter.setSongList(songList);
|
||||
adapter.setNewData(songList);
|
||||
mBinding.smartRefreshLayout.finishRefresh();
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
private String currentTimeFilter = "today"; // 默认为今日
|
||||
private int page = 1;
|
||||
private String roomId;
|
||||
private String type="1";
|
||||
private String type="2";
|
||||
|
||||
private SongHistoryAdapter adapter;
|
||||
|
||||
@@ -82,7 +82,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
resetFilterStyles();
|
||||
mBinding.tvFilterToday.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r16_3abc6d);
|
||||
currentTimeFilter = "today";
|
||||
type="1";
|
||||
type="2";
|
||||
updateHistoryList();
|
||||
}
|
||||
});
|
||||
@@ -93,7 +93,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
resetFilterStyles();
|
||||
mBinding.tvFilterYesterday.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r16_3abc6d);
|
||||
currentTimeFilter = "yesterday";
|
||||
type="2";
|
||||
type="3";
|
||||
updateHistoryList();
|
||||
}
|
||||
});
|
||||
@@ -104,7 +104,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
resetFilterStyles();
|
||||
mBinding.tvFilterThisWeek.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r16_3abc6d);
|
||||
currentTimeFilter = "this_week";
|
||||
type="3";
|
||||
type="4";
|
||||
updateHistoryList();
|
||||
}
|
||||
});
|
||||
@@ -115,7 +115,7 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
resetFilterStyles();
|
||||
mBinding.tvFilterLastWeek.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r16_3abc6d);
|
||||
currentTimeFilter = "last_week";
|
||||
type="4";
|
||||
type="5";
|
||||
updateHistoryList();
|
||||
}
|
||||
});
|
||||
@@ -193,8 +193,9 @@ public class SongHistoryFragment extends BaseMvpFragment<RequestSongPresenter,Fr
|
||||
} else if (state == RefreshState.Loading) {
|
||||
// 加载更多,添加数据到列表
|
||||
if (s.getLists().size() > 0) {
|
||||
// 只添加新加载的数据,而不是整个列表
|
||||
songList.addAll(s.getLists());
|
||||
adapter.addData(songList);
|
||||
adapter.addData(s.getLists());
|
||||
mBinding.smartRefreshLayout.finishLoadMore(true);
|
||||
} else {
|
||||
// 没有更多数据
|
||||
|
||||
Reference in New Issue
Block a user