【发布时间】:2016-11-27 15:04:55
【问题描述】:
我正在尝试检查 RecyclerView 中的图像和视频的可用性,但挑战是 VideoView 是所有项目列表中唯一可见的,ImageView 根本不可见,我想要什么是检查 ImageView 中是否存在 ImageView 的 Videoview GOES,以及视频何时在 VideoView ImageView Goes 中可用。
我正在开发一个应用程序,它可以发布视频和图像并在同一个 RecyclerView 中检索它们,所以请帮助我如何实现这一目标
下面是我的代码,但它不起作用:
boolean hasDrawable = (viewHolder.imagePost.getDrawable()!= null);
String hasVideo_string =(String)viewHolder.videoLayout.getTag();
boolean hasVideo = Boolean.parseBoolean(hasVideo_string);
if(hasDrawable){
viewHolder.setTitle(model.getEventTitle());
viewHolder.setDesc(model.getEventDescription());
viewHolder.setImage(c, model.getEventImage());
viewHolder.videoLayout.setVisibility(View.INVISIBLE);
}
else if(hasVideo) {
viewHolder.setTitle(model.getEventTitle());
viewHolder.setDesc(model.getEventDescription());
viewHolder.setVideo(c, model.getEventVideo());
viewHolder.imagePost.setVisibility(View.GONE);
}
这就是我在 ViewHolder 类中设置图像和视频的方式
public void setImage(final Context c,final String imageUrl){
//
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).fit().centerInside().placeholder(R.mipmap.add_btn)
.networkPolicy(NetworkPolicy.OFFLINE).into(imagePost, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
//Reloading an image again ...
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).placeholder(R.mipmap.add_btn)
.into(imagePost);
}
});
}
还有视频(我使用了一个名为 FullscreenVideoLayout 的库,它类似于 VideoView,但经过了很多定制)
public void setVideo(final Context c, final String videoUrl){
// videoLayout.setActivity(this);
// videoLayout.setActivity(get);
Uri videoUri = Uri.parse(videoUrl);
try {
videoLayout.setVideoURI(videoUri);
videoLayout.setTag(videoUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
这是完整的ViewHolder 类
public static class BlogViewHolder extends RecyclerView.ViewHolder{
View mView;
private ImageView imagePost;
private FullscreenVideoLayout videoLayout;
private VideoView videoView;
public BlogViewHolder(View itemView) {
super(itemView);
mView=itemView;
imagePost =(ImageView)mView.findViewById(R.id.post_image);
videoLayout = (FullscreenVideoLayout) mView.findViewById(R.id.post_video);
}
public void setTitle(String title){
TextView post_title = (TextView)mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc){
TextView post_desc = (TextView)mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
public void setImage(final Context c,final String imageUrl){
//
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).fit().centerInside().placeholder(R.mipmap.add_btn)
.networkPolicy(NetworkPolicy.OFFLINE).into(imagePost, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
//Reloading an image again ...
Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).placeholder(R.mipmap.add_btn)
.into(imagePost);
}
});
}
public void setVideo(final Context c, final String videoUrl){
// videoLayout.setActivity(this);
// videoLayout.setActivity(get);
Uri videoUri = Uri.parse(videoUrl);
try {
videoLayout.setVideoURI(videoUri);
videoLayout.setTag(videoUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
您是否检查过 hasVideo/hasDrawable 标志是否设置正确?你在哪里/如何设置 videoLayout 标签和 imagePost drawable?
-
我已经更新了我的帖子@daemontus,检查我是如何设置它们的
-
好吧,我的猜测是,当你调用 getDrawable() 时,毕加索还没有在视图中设置任何东西(它在后台做了很多事情,有时很难确切地告诉某些事情何时会发生)。所以我的建议是做这样的事情: boolean hasImage = /*你用来决定是否首先调用 setImage 的任何条件*/; boolean hasVideo = /*无论你使用什么条件来决定是否调用 setVideo*/; if (hasImage) { setImage(); imagePost.setVisibility(INVISIBLE) } else if (hasVideo) { 视频相同 }
-
@daemontus ,感谢您的解释,但它让我有点困惑,请您尝试为我编辑答案我还发布了完整的
Viewholder课程,我仍然是这方面的初学者东西。谢谢 -
@daemontus,请帮我解决这个问题,我卡住了,我很乐意为您提供帮助
标签: java android imageview android-recyclerview android-videoview