Google已经发布了适用于Google的YouTube API。在那个api中是一个YouTubeThumbnailView来显示电影的缩略图。 我想在ListView中显示缩略图。我已经制作了一个适配器来制作视图。但我不知道如何处理这个问题。
在我的ListView适配器的getView中,我扩展了包含YouTubeThumbnailView的布局。根据文档(https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeThumbnailView),我应该调用initialize方法。
我想知道我是否需要一次调用initialize方法,或者如果ListView重新使用该视图也会调用它?无法检查YouTubeThumbnailView是否已初始化?所以我想我应该多次调用它。但我不知道是否允许这样做?
答案 0 :(得分:16)
您应该只调用一次,但在初始化后保存对加载器的引用。解决此问题的一种方法是保留从View
到YouTubeThumbnailLoader
的地图。在getView
中,有3种情况:
在第1和第3种情况下,您需要记住加载程序初始化时应该执行的操作。你可以,例如将视频ID保存在视图的标记中。
示例代码:
Map<View, YouTubeThumbnailLoader> loaders;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
String videoId = getVideoId(position);
if (view == null) {
// Case 1 - We need to initialize the loader
view = inflater.inflate(..., parent, false);
YouTubeThumbnailView thumbnail = (YouTubeThumbnailView) view.findViewById(R.id.thumbnail);
thumbnail.setTag(videoId);
thumbnail.initialize(DeveloperKey.DEVELOPER_KEY, thumbnailListener);
} else {
YouTubeThumbnailView thumbnail = (YouTubeThumbnailView) view.findViewById(R.id.thumbnail);
YouTubeThumbnailLoader loader = loaders.get(thumbnail);
if (loader == null) {
// Case 3 - The loader is currently initializing
thumbnail.setTag(videoId);
} else {
// Case 2 - The loader is already initialized
thumbnail.setImageResource(R.drawable.loading_thumbnail);
loader.setVideo(videoId);
}
}
return view;
}
在你的thumbnailListener中:
@Override
public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) {
String videoId = (String) view.getTag();
loaders.put(view, loader);
view.setImageResource(R.drawable.loading_thumbnail);
loader.setVideo(videoId);
}