|
|
|
@ -1,7 +1,5 @@
|
|
|
|
package com.example.musicplayer.adapter;
|
|
|
|
package com.example.musicplayer.adapter;
|
|
|
|
|
|
|
|
|
|
|
|
// 导入所需的包和类
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.support.annotation.NonNull;
|
|
|
|
import android.support.annotation.NonNull;
|
|
|
|
import android.support.v7.widget.RecyclerView;
|
|
|
|
import android.support.v7.widget.RecyclerView;
|
|
|
|
@ -27,32 +25,30 @@ import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 搜索内容适配器,用于展示搜索结果中的单曲和专辑列表。
|
|
|
|
|
|
|
|
* Created by 残渊 on 2018/11/21.
|
|
|
|
* Created by 残渊 on 2018/11/21.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
private static final String TAG = "SearchContentAdapter";
|
|
|
|
private static final String TAG = "SearchContentAdapter";
|
|
|
|
|
|
|
|
|
|
|
|
private ArrayList<SearchSong.DataBean.SongBean.ListBean> mSongListBeans; // 单曲列表数据
|
|
|
|
private ArrayList<SearchSong.DataBean.SongBean.ListBean> mSongListBeans;
|
|
|
|
private List<Album.DataBean.AlbumBean.ListBean> mAlbumList; // 专辑列表数据
|
|
|
|
private List<Album.DataBean.AlbumBean.ListBean> mAlbumList;
|
|
|
|
private static OnItemClickListener mItemClick; // 单曲点击事件监听器
|
|
|
|
private static OnItemClickListener mItemClick;
|
|
|
|
private static OnAlbumItemClickListener mAlbumClick; // 专辑点击事件监听器
|
|
|
|
private static OnAlbumItemClickListener mAlbumClick;
|
|
|
|
private String mSeek; // 搜索关键字
|
|
|
|
private String mSeek;
|
|
|
|
private Context mContext; // 上下文对象
|
|
|
|
private Context mContext;
|
|
|
|
private int mLastPosition = -1; // 上一次点击的位置
|
|
|
|
private int mLastPosition = -1;
|
|
|
|
private int mType; // 列表类型,单曲或专辑
|
|
|
|
private int mType;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置单曲点击事件监听器
|
|
|
|
|
|
|
|
public static void setItemClick(OnItemClickListener itemClick) {
|
|
|
|
public static void setItemClick(OnItemClickListener itemClick) {
|
|
|
|
mItemClick = itemClick;
|
|
|
|
mItemClick = itemClick;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置专辑点击事件监听器
|
|
|
|
|
|
|
|
public static void setAlbumClick(OnAlbumItemClickListener albumClick) {
|
|
|
|
public static void setAlbumClick(OnAlbumItemClickListener albumClick) {
|
|
|
|
mAlbumClick = albumClick;
|
|
|
|
mAlbumClick = albumClick;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 构造函数,初始化专辑搜索适配器
|
|
|
|
|
|
|
|
public SearchContentAdapter(List<Album.DataBean.AlbumBean.ListBean> dataBeans, String seek, Context context, int type) {
|
|
|
|
public SearchContentAdapter(List<Album.DataBean.AlbumBean.ListBean> dataBeans, String seek, Context context, int type) {
|
|
|
|
mContext = context;
|
|
|
|
mContext = context;
|
|
|
|
mSeek = seek;
|
|
|
|
mSeek = seek;
|
|
|
|
@ -60,7 +56,7 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
mType = type;
|
|
|
|
mType = type;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 构造函数,初始化单曲搜索适配器
|
|
|
|
|
|
|
|
public SearchContentAdapter(ArrayList<SearchSong.DataBean.SongBean.ListBean> songListBeans, String seek, Context context, int type) {
|
|
|
|
public SearchContentAdapter(ArrayList<SearchSong.DataBean.SongBean.ListBean> songListBeans, String seek, Context context, int type) {
|
|
|
|
mContext = context;
|
|
|
|
mContext = context;
|
|
|
|
mSeek = seek;
|
|
|
|
mSeek = seek;
|
|
|
|
@ -68,11 +64,10 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
mType = type;
|
|
|
|
mType = type;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建ViewHolder
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
|
final View view;
|
|
|
|
final View view;
|
|
|
|
if (viewType == Constant.TYPE_SONG) {
|
|
|
|
if (viewType == Constant.TYPE_SONG ) {
|
|
|
|
view = LayoutInflater.from(parent.getContext())
|
|
|
|
view = LayoutInflater.from(parent.getContext())
|
|
|
|
.inflate(R.layout.recycler_song_search_item, parent, false);
|
|
|
|
.inflate(R.layout.recycler_song_search_item, parent, false);
|
|
|
|
return new ViewHolder(view);
|
|
|
|
return new ViewHolder(view);
|
|
|
|
@ -82,37 +77,35 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
return new AlbumHolder(view);
|
|
|
|
return new AlbumHolder(view);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 将数据绑定到ViewHolder
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
|
|
|
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
|
|
|
|
// 根据ViewHolder类型进行不同的数据处理
|
|
|
|
|
|
|
|
if (holder instanceof ViewHolder) {
|
|
|
|
if (holder instanceof ViewHolder) {
|
|
|
|
ViewHolder songHolder = (ViewHolder) holder;
|
|
|
|
ViewHolder songHolder = (ViewHolder) holder;
|
|
|
|
SearchSong.DataBean.SongBean.ListBean songListBean = mSongListBeans.get(position);
|
|
|
|
SearchSong.DataBean.SongBean.ListBean songListBean = mSongListBeans.get(position);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置歌手名称,可能存在多个歌手
|
|
|
|
//设置歌手,因为歌手可能有两个
|
|
|
|
String singer = songListBean.getSinger().get(0).getName();
|
|
|
|
String singer = songListBean.getSinger().get(0).getName();
|
|
|
|
for (int i = 1; i < songListBean.getSinger().size(); i++) {
|
|
|
|
for (int i = 1; i < songListBean.getSinger().size(); i++) {
|
|
|
|
singer += "、" + songListBean.getSinger().get(i).getName();
|
|
|
|
singer+="、"+songListBean.getSinger().get(i).getName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
songHolder.artistTv.setText(singer);
|
|
|
|
songHolder.artistTv.setText(singer);
|
|
|
|
// 高亮显示搜索关键字
|
|
|
|
//设置与搜索一样的string的颜色
|
|
|
|
CommonUtil.showStringColor(mSeek, singer, songHolder.artistTv);
|
|
|
|
CommonUtil.showStringColor(mSeek, singer, songHolder.artistTv);
|
|
|
|
songHolder.titleTv.setText(songListBean.getSongname());
|
|
|
|
songHolder.titleTv.setText(songListBean.getSongname());
|
|
|
|
CommonUtil.showStringColor(mSeek, songListBean.getSongname(), songHolder.titleTv);
|
|
|
|
CommonUtil.showStringColor(mSeek, songListBean.getSongname(), songHolder.titleTv);
|
|
|
|
|
|
|
|
|
|
|
|
// 根据歌曲是否正在播放显示不同的样式
|
|
|
|
//根据点击显示
|
|
|
|
if (songListBean.getSongmid().equals(FileUtil.getSong().getSongId())) {
|
|
|
|
if(songListBean.getSongmid().equals(FileUtil.getSong().getSongId())){
|
|
|
|
songHolder.playLine.setVisibility(View.VISIBLE);
|
|
|
|
songHolder.playLine.setVisibility(View.VISIBLE);
|
|
|
|
mLastPosition = position;
|
|
|
|
mLastPosition =position;
|
|
|
|
songHolder.mItemView.setBackgroundResource(R.color.translucent);
|
|
|
|
songHolder.mItemView.setBackgroundResource(R.color.translucent);
|
|
|
|
} else {
|
|
|
|
}else {
|
|
|
|
songHolder.playLine.setVisibility(View.INVISIBLE);
|
|
|
|
songHolder.playLine.setVisibility(View.INVISIBLE);
|
|
|
|
songHolder.mItemView.setBackgroundResource(R.color.transparent);
|
|
|
|
songHolder.mItemView.setBackgroundResource(R.color.transparent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 设置点击事件
|
|
|
|
|
|
|
|
songHolder.mItemView.setOnRippleCompleteListener(rippleView -> {
|
|
|
|
songHolder.mItemView.setOnRippleCompleteListener(rippleView -> {
|
|
|
|
mItemClick.onClick(position);
|
|
|
|
mItemClick.onClick(position);
|
|
|
|
equalPosition(position);
|
|
|
|
equalPosition(position);
|
|
|
|
@ -120,24 +113,21 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
AlbumHolder albumHolder = (AlbumHolder) holder;
|
|
|
|
AlbumHolder albumHolder = (AlbumHolder) holder;
|
|
|
|
Album.DataBean.AlbumBean.ListBean albumList = mAlbumList.get(position);
|
|
|
|
Album.DataBean.AlbumBean.ListBean albumList = mAlbumList.get(position);
|
|
|
|
// 使用Glide加载专辑图片
|
|
|
|
|
|
|
|
Glide.with(mContext).load(albumList.getAlbumPic())
|
|
|
|
Glide.with(mContext).load(albumList.getAlbumPic())
|
|
|
|
.apply(RequestOptions.errorOf(R.drawable.background)).into(albumHolder.albumIv);
|
|
|
|
.apply(RequestOptions.errorOf(R.drawable.background)).into(albumHolder.albumIv);
|
|
|
|
albumHolder.albumName.setText(albumList.getAlbumName());
|
|
|
|
albumHolder.albumName.setText(albumList.getAlbumName());
|
|
|
|
albumHolder.singerName.setText(albumList.getSingerName());
|
|
|
|
albumHolder.singerName.setText(albumList.getSingerName());
|
|
|
|
albumHolder.publicTime.setText(albumList.getPublicTime());
|
|
|
|
albumHolder.publicTime.setText(albumList.getPublicTime());
|
|
|
|
// 高亮显示搜索关键字
|
|
|
|
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getAlbumName(), albumHolder.albumName);
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getAlbumName(), albumHolder.albumName);
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getSingerName(), albumHolder.singerName);
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getSingerName(), albumHolder.singerName);
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getPublicTime(), albumHolder.publicTime);
|
|
|
|
CommonUtil.showStringColor(mSeek, albumList.getPublicTime(), albumHolder.publicTime);
|
|
|
|
// 设置点击事件
|
|
|
|
|
|
|
|
albumHolder.item.setOnRippleCompleteListener(rippleView -> {
|
|
|
|
albumHolder.item.setOnRippleCompleteListener(rippleView -> {
|
|
|
|
mAlbumClick.onClick(position);
|
|
|
|
mAlbumClick.onClick(position);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取列表项的总数
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int getItemCount() {
|
|
|
|
public int getItemCount() {
|
|
|
|
if (mType == Constant.TYPE_SONG) {
|
|
|
|
if (mType == Constant.TYPE_SONG) {
|
|
|
|
@ -148,7 +138,6 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 内部类ViewHolder,用于单曲列表项
|
|
|
|
|
|
|
|
class ViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
class ViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
TextView titleTv;
|
|
|
|
TextView titleTv;
|
|
|
|
TextView artistTv;
|
|
|
|
TextView artistTv;
|
|
|
|
@ -164,7 +153,6 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 内部类AlbumHolder,用于专辑列表项
|
|
|
|
|
|
|
|
class AlbumHolder extends RecyclerView.ViewHolder {
|
|
|
|
class AlbumHolder extends RecyclerView.ViewHolder {
|
|
|
|
ImageView albumIv;
|
|
|
|
ImageView albumIv;
|
|
|
|
TextView singerName;
|
|
|
|
TextView singerName;
|
|
|
|
@ -182,13 +170,12 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取列表项的视图类型
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int getItemViewType(int position) {
|
|
|
|
public int getItemViewType(int position) {
|
|
|
|
return mType;
|
|
|
|
return mType;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 判断点击的是否为上一个点击的项目,并更新视图
|
|
|
|
//判断点击的是否为上一个点击的项目
|
|
|
|
public void equalPosition(int position) {
|
|
|
|
public void equalPosition(int position) {
|
|
|
|
if (position != mLastPosition) {
|
|
|
|
if (position != mLastPosition) {
|
|
|
|
if (mLastPosition != -1) notifyItemChanged(mLastPosition);
|
|
|
|
if (mLastPosition != -1) notifyItemChanged(mLastPosition);
|
|
|
|
@ -196,4 +183,4 @@ public class SearchContentAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
|
}
|
|
|
|
}
|
|
|
|
notifyItemChanged(position);
|
|
|
|
notifyItemChanged(position);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|