Android 带有ListView和TextureView的全屏视频源;“眨眼”;数据集更改时
我正在尝试在Android上创建一个全屏视频源 我决定使用Android 带有ListView和TextureView的全屏视频源;“眨眼”;数据集更改时,android,listview,video,notifydatasetchanged,textureview,Android,Listview,Video,Notifydatasetchanged,Textureview,我正在尝试在Android上创建一个全屏视频源 我决定使用列表视图,每个项目都是纹理视图。因为它是全屏的,所以在给定的时刻,我们总是显示一个且只有一个项目。 当TextureView可用时,我创建一个MediaPlayer并在表面上播放视频。它工作得很好 当我到达列表的底部时,我会从服务器加载更多数据。加载新数据时,我调用我的BaseAdapter的notifyDataSetChanged(),并为每个可见项重新创建视图 问题在于它会使当前视频“闪烁”(重新创建视图时,视频会消失,然后重新出现)
列表视图
,每个项目都是纹理视图
。因为它是全屏的,所以在给定的时刻,我们总是显示一个且只有一个项目。当
TextureView
可用时,我创建一个MediaPlayer
并在表面上播放视频。它工作得很好
当我到达列表的底部时,我会从服务器加载更多数据。加载新数据时,我调用我的BaseAdapter
的notifyDataSetChanged()
,并为每个可见项重新创建视图
问题在于它会使当前视频“闪烁”(重新创建视图时,视频会消失,然后重新出现)。
我真的不知道如何解决这个问题:ListView
总是在数据集更改时重新创建项目视图。
我觉得在这里使用ListView
是正确的解决方案,因为我显示了一个视频项目列表,但可能我走错了方向
- 如何停止这种闪烁?(有没有办法告诉
不要重新创建当前项目的视图?)列表视图
- 我是否应该使用
列表视图以外的其他内容?如果是,我应该看什么
public View getView (int position, View convertView, ViewGroup parent) {
Holder holder;
if(convertView != null) {
holder = (Holder) convertView.getTag();
if(holder.displayedContent == getContentToDisplay(position)) {
// the view we were asked to convert is already displaying
// the good video, no need to change anything to it !
return convertView;
} else {
// convert the view by displaying the new video
}
} else {
// create a new view !
}
}
private static class Holder {
int displayedContent;
// + references to the views
}
视频播放是停止并重新启动,还是在“闪烁”期间没有出现在屏幕上?谢谢您的时间。视频停止然后重新启动。太棒了!我推迟了这个模式的使用,因为它迫使我处理很多内部状态(视频等),但我不应该这样做!它就像一个符咒!