gpt4 book ai didi

android - 更改数据集时使用 ListView 和 TextureView "blinks"的全屏视频源

转载 作者:行者123 更新时间:2023-11-30 02:25:58 25 4
gpt4 key购买 nike

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

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

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

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

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

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

谢谢。

最佳答案

你应该使用 View Holder pattern .在您的情况下,将当前显示的视频的 id 添加到 holder,如果它已经在显示视频,这将允许您返回不变的 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
}

关于android - 更改数据集时使用 ListView 和 TextureView "blinks"的全屏视频源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com