Android 在RecyclerView中使用JSON对YouTube数据进行排序
我正在使用YouTube数据API,并在RecyclerView中使用JSON改进获取数据。该数据由一个频道的视频列表组成,该频道还包括实况视频 频道的URL为:Android 在RecyclerView中使用JSON对YouTube数据进行排序,android,android-recyclerview,youtube-data-api,Android,Android Recyclerview,Youtube Data Api,我正在使用YouTube数据API,并在RecyclerView中使用JSON改进获取数据。该数据由一个频道的视频列表组成,该频道还包括实况视频 频道的URL为: https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCJekW1Vj5fCVEGdye_mBN6Q&maxResults=50&order=date&key=[您的API密钥] 我正在尝试在RecyclerView中对数据进行排序,以便实时视频位于列
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCJekW1Vj5fCVEGdye_mBN6Q&maxResults=50&order=date&key=[您的API密钥]
我正在尝试在RecyclerView中对数据进行排序,以便实时视频位于列表的顶部,其余视频按照日期进行排序。RecyclerView的适配器如下所示:
public class AdapterHome extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<VideoYT> videoList;
public
AdapterHome(Context context, List<VideoYT> videoList) {
this.context = context;
this.videoList = videoList;
}
class YoutubeHolder extends RecyclerView.ViewHolder {
ImageView thumbnail;
TextView judul, tanggal;
public YoutubeHolder(@NonNull View itemView) {
super(itemView);
thumbnail = itemView.findViewById(R.id.iv_thumbnail);
judul = itemView.findViewById(R.id.tv_judul);
tanggal = itemView.findViewById(R.id.tv_tglUpdate);
}
public void setData(final VideoYT data) {
final String getJudul = data.getSnippet().getTitle();
String getTgl = data.getSnippet().getPublishedAt();
String getThumb = data.getSnippet().getThumbnails().getMedium().getUrl();
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, YTPlayerActivity.class);
i.putExtra("video_id", data.getId().getVideoId());
i.putExtra("video_title", getJudul);
context.startActivity(i);
}
});
judul.setText(getJudul);
tanggal.setText(getTgl);
Picasso.get()
.load(getThumb)
// .placeholder(R.mipmap.ic_gujrati)
.fit()
.centerCrop()
.into(thumbnail, new Callback() {
@Override
public void onSuccess() {
Log.d(TAG, "Thumbnail berhasil ditampilkan");
}
@Override
public void onError(Exception e) {
Log.e(TAG, "Thumbnail error: ", e);
}
});
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.row_item_home, parent, false);
return new YoutubeHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
VideoYT videoYT = videoList.get(position);
YoutubeHolder yth = (YoutubeHolder) holder;
yth.setData(videoYT);
}
@Override
public int getItemCount() {
return videoList.size();
}
}
{
"kind": "youtube#searchResult",
"etag": "BARItyEvlwxiMQCYVni5-wa94N0",
"id": {
"kind": "youtube#video",
"videoId": "C51KWXknpd8"
},
"snippet": {
"publishedAt": "2020-10-23T11:33:46Z",
"channelId": "UCJekW1Vj5fCVEGdye_mBN6Q",
"title": "SAMAA News Live | Samaa TV Live | 24/7 Pakistan News Live Headlines, Bulletins & Press Conferences",
"description": "samaalive #pakistannewslive #livenews LIVE STREAM SAMAA TV 24/7 | live streaming on YouTube | Headlines , Bulletins, Special & Exclusive Coverage Stay ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/C51KWXknpd8/default_live.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/C51KWXknpd8/mqdefault_live.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/C51KWXknpd8/hqdefault_live.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "SAMAA TV",
**"liveBroadcastContent": "live",**
"publishTime": "2020-10-23T11:33:46Z"
}
},
{
"kind": "youtube#searchResult",
"etag": "3qQo96hAKuvzR1yqmOX2RRwm0fg",
"id": {
"kind": "youtube#video",
"videoId": "JSUmX2wgwwk"
},
"snippet": {
"publishedAt": "2020-10-23T11:20:53Z",
"channelId": "UCJekW1Vj5fCVEGdye_mBN6Q",
"title": "Samaa Headlines 4pm | Muhammad Zubair Jhoot bolne ke mahir hain - Shibili Faraz",
"description": "samaanewslive #breakingnews #pakistannewslive Stay up-to-date on the major news making headlines across Pakistan on SAMAA TV's top of the hour ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/JSUmX2wgwwk/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/JSUmX2wgwwk/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/JSUmX2wgwwk/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "SAMAA TV",
"liveBroadcastContent": "none",
"publishTime": "2020-10-23T11:20:53Z"
}
},
您的问题归结为对
VideoYT
类(例如,在类AdapterHome
本身中定义)有一个自定义比较器:
根据程序的更广泛上下文(上面的示例代码没有显示),您可能还需要(想要?)在该构造函数中不修改videoList
。然后,不要对视频列表本身进行排序,而是制作一份副本并对该副本进行排序:
public
AdapterHome(Context context, List<VideoYT> videoList) {
this.context = context;
this.videoList = new ArrayList<>(videoList);
Collections.sort(this.videoList, myComparator);
}
公共
AdapterHome(上下文,列表视频列表){
this.context=上下文;
this.videoList=新的数组列表(videoList);
Collections.sort(this.videoList,myComparator);
}
您能解释一下在适配器中的最后一部分(collection.sort)添加到哪里吗?已经说过:在类的构造函数中AdapterHome
。请看我上面编辑的答案。谢谢。但现在它没有显示任何内容。空白屏幕没有您选择的两个选项中的任何一个?第二个。让我也试试第一个
public
AdapterHome(Context context, List<VideoYT> videoList) {
this.context = context;
Collections.sort(videoList, myComparator);
this.videoList = videoList;
}
public
AdapterHome(Context context, List<VideoYT> videoList) {
this.context = context;
this.videoList = new ArrayList<>(videoList);
Collections.sort(this.videoList, myComparator);
}