在安卓应用程序中搜索 Youtube 播放列表



>我按照此示例在Android应用程序中显示YouTube视频 我无法在其中实现搜索栏。如何实现搜索栏的逻辑?我尝试实现可搜索界面,但在设置部分失败。

这是适配器:

public class PlaylistCardAdapter extends  RecyclerView.Adapter<PlaylistCardAdapter.ViewHolder> {
.......
public static class ViewHolder extends RecyclerView.ViewHolder {

public PlaylistCardAdapter(PlaylistVideos playlistVideos, YouTubeRecyclerViewFragment.LastItemReachedListener lastItemReachedListener) {
mPlaylistVideos = playlistVideos;
mListener = lastItemReachedListener;
}
// Create new views (invoked by the layout manager)
@Override
public PlaylistCardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflate a card layout
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.youtube_video_card, parent, false);
// populate the viewholder
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (mPlaylistVideos.size() == 0) {
return;
}
final Video video = mPlaylistVideos.get(position);
final VideoSnippet videoSnippet = video.getSnippet();
holder.mTitleText.setText(videoSnippet.getTitle());
if (mListener != null) {
// get the next playlist page if we're at the end of the current page and we have another page to get
final String nextPageToken = mPlaylistVideos.getNextPageToken();
if (!isEmpty(nextPageToken) && position == mPlaylistVideos.size() - 1) {
holder.itemView.post(new Runnable() {
@Override
public void run() {
mListener.onLastItem(position, nextPageToken);
}
});
}
}
}
@Override
public int getItemCount() {
return mPlaylistVideos.size();
}
private boolean isEmpty(String s) {
if (s == null || s.length() == 0) {
return true;
}
return false;
}

这是片段类的链接 - 链接

此解决方案包括在适配器中具有播放列表的两个副本。一个是传递给适配器的完整原始列表,另一个是列表,其中包含通过应用搜索选择的项目。

第二个列表是用户提交搜索时将更新的列表,也将是回收器视图中显示的列表。

在以下示例中:

在您的情况下,Xxxxx将是一个播放列表项目。

originalData保留完整的项目列表。

调用setData()以使用新的项列表更新回收器视图。

调用setSearchText()以传入文本以筛选回收器视图项。
例如,可以使用要搜索的完整文本来调用它,或者每次用户在键入 EditText 时释放键时调用它。

refreshData()调用applySearch()进行过滤,然后使用找到的项目更新屏幕上的回收器视图。

public class XxxxxsRecyclerAdapter extends RecyclerView.Adapter<XxxxxsRecyclerAdapter.ViewHolder> {
private ArrayList<Xxxxx> data;
private ArrayList<Xxxxx> originalData;
private Context context;
private String searchText;
public XxxxxsRecyclerAdapter(Context context, ArrayList<Xxxxx> data) {
super();
this.context = context;
this.data = data;
this.originalData = new ArrayList<>();
if(this.data != null) {
this.originalData.addAll(this.data);
}
}
public void setData(ArrayList<Xxxxx> data) {
this.data = data;
this.originalData.clear();
if (data != null) {
this.originalData.addAll(this.data);
}
refreshData();
}
public void setSearchText(String searchText){
this.searchText = searchText;
refreshData();
}

private void applySearch(){
if(data != null) {
if (searchText != null && !searchText.equals("")) {
ArrayList<Xxxxx> tmp = new ArrayList<>();
tmp.addAll(data);
data.clear();
for (Xxxxx xxxxx : tmp) {
if (xxxxx.getNombre().toUpperCase().contains(searchText.toUpperCase())) {
data.add(xxxxx);
}
}
}
}
}
private void refreshData(){
this.applySearch();
this.notifyDataSetChanged();
}
...
}

最新更新