大佬教程收集整理的这篇文章主要介绍了使用Android中的Firebase在单个RecyclerView中获取两个不同的视图,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>使用毕加索的图片@L_696_2@
>使用Youtube Api的视频帖子.
我已经使用RecyclerView和Firebase recyclerAdapter实现了这两个问题,但问题是我不知道如何区分两个视图,如果我使用Youtube Api使用视频视图它附加了图像视图并且还复制到recyclerView中的所有项目,然后所有项目中只播放一个视频.我想要的是,如果我想要显示图像,那么该项目只能获取图像,如果我想显示视频,那么reyclerView项目只能获得视频而不重复.喜欢Instagram.我搜索了很多论坛,但没有得到任何帮助.请帮忙.我使用Firebase作为我的数据库,ViewHolders就是根据这个.
FirebaseRecyclerAdapter <post,postViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<post,postViewHolder>( post.class,R.layout.post_row_recycle_home,postViewHolder.class,mDatabaseReference ) { @Override protected void populateViewHolder(postViewHolder viewHolder,post model,int position) { viewHolder.setimage(getApplicationContext(),model.getImage()); viewHolder.setYoutube(model.getYoutube()); } }; mrecyclerView.setAdapter(firebaseRecyclerAdapter);
持有人:
public static class postViewHolder extends RecyclerViewPager.ViewHolder{ View mView; public postViewHolder(View itemView) { super(itemView); mView = itemView; } public void setYoutube(final String youtubE){ final YouTubePlayerView youPlay = (YouTubePlayerView) mView.findViewById(R.id.youtuber); youPlay.initialize("SOME KEY",new YouTubePlayer.onInitializedListener() { @Override public void onInitializationsuccess(YouTubePlayer.Provider provider,YouTubePlayer youTubePlayer,Boolean b) { youTubePlayer.cueVideo(youtubE); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider,YouTubeInitializationResult youTubeInitializationResult) { } }); } public void setimage(final Context ctx,final String imagE){ final ImageView post_image = (ImageView)mView.findViewById(R.id.post_imagE); PiCasso.with(ctX).load(imagE) .networkPolicy(NetworkPolicy.oFFLINE).into(post_image,new CallBACk() { @Override public void onsuccess() { } @Override public void onError() { PiCasso.with(ctX).load(imagE).into(post_imagE); } }); } }
截屏示例:
private static final int TYPE_YOUTUBE = 1111; private static final int TYPE_IMAGE = 2222; @Override public int getItemViewType(int position) { //note: classes should start with uppercase Post model = getItem(position); if (model.isYoutube()) { //note: you'll have to define this method return TYPE_YOUTUBE; } else { return TYPE_IMAGE; } }
然后在onCreateViewHolder中检查要创建的类型:
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) { RecyclerView.ViewHolder holder; switch (viewTypE) { case TYPE_YOUTUBE: //note: save an inflater when you construct the adapter return new YtViewHolder(inflater.inflate(R.layout.item_youtube,parent,falsE)); case TYPE_IMAGE: return new ImgViewHolder(inflater.inflate(R.layout.item_image,falsE)); } }
分开你的VH模型:
public abstract class PostViewHolder extends RecyclerView.ViewHolder { //note: extends changed public abstract void bind(final String input){ } public static class YtViewHolder extends PostViewHolder { //note: extends changed private YouTubePlayerView mView; public YtViewHolder(View itemView) { super(itemView); mView = (YouTubePlayerView) itemView.findViewById(R.id.youtuber); } public void bind(final String youtubE){ mView.initialize("SOME KEY",Boolean b) { youTubePlayer.cueVideo(youtubE); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider,YouTubeInitializationResult youTubeInitializationResult) { } }); } } public static class ImgViewHolder extends PostViewHolder { private ImageView mView; public ImageView(View itemView) { super(itemView); mView = (ImageView) itemView.findViewById(R.id.post_imagE); } public void bind(final String imagE){ PiCasso.with(mView.getContext()).load(imagE).networkPolicy(NetworkPolicy.oFFLINE).into(mView,new CallBACk() { @Override public void onsuccess() { } @Override public void onError() { PiCasso.with(ctX).load(imagE).into(mView); } }); } }
您的populate方法可以简化如下:
@Override protected void populateViewHolder(PostViewHolder viewHolder,int position) { viewHolder.bind(model.isYoutube()? model.getYoutube() : model.getImage()); }
不同的项目:
这有点令人担忧.如果我理解正确,列表中的每个项目都具有相同的图像和视频.这可能意味着您将相同的模型返回到每个位置.确保如果实现getItem,则为每个位置返回不同的项目(Firebase适配器默认情况下会执行此操作).还要确保model.getYoutube等不返回静态数据.
以上是大佬教程为你收集整理的使用Android中的Firebase在单个RecyclerView中获取两个不同的视图全部内容,希望文章能够帮你解决使用Android中的Firebase在单个RecyclerView中获取两个不同的视图所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。