1

我正在尝试在 Android 上创建全屏视频源。

我决定使用 aListView并且每个项目都是一个TextureView. 因为它是全屏的,所以在给定的时刻,我们总是只有一个项目显示。
TextureView可用时,我创建一个MediaPlayer并在表面上播放视频。它工作得很好。

当我到达列表的底部时,我会从服务器加载更多数据。加载新数据后,我调用notifyDataSetChanged()myBaseAdapter并为每个可见项目重新创建视图。

问题是它使当前视频“闪烁”(重新创建视图时,视频消失然后重新出现)。

我真的不知道如何解决这个问题:ListView当数据集发生变化时,总是重新创建项目视图。我觉得ListView在这里使用 a 是正确的解决方案,因为我显示了一个视频项目列表,但也许我走错了路……

  • 如何停止这种闪烁?(有没有办法告诉ListView不要重新创建当前项目的视图?)
  • 我应该使用 a 以外的东西ListView吗?如果是,我应该看什么?

谢谢。

4

1 回答 1

1

您应该使用View Holder 模式。在您的情况下,将当前显示的视频的 id 添加到持有者,这将允许您返回未更改的 convertView,如果它已经显示视频。

这是一个展示这个想法的(未经测试的)代码示例:

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
}
于 2015-01-13T11:09:56.300 回答