【问题标题】:YouTubeThumbnailView in ListViewListView 中的 YouTubeThumbnailView
【发布时间】:2012-12-26 22:16:38
【问题描述】:

Google 已发布适用于 Google 的 YouTube api。在那个 api 中是一个 YouTubeThumbnailView 来显示电影的缩略图。 我想在 ListView 中显示缩略图。我制作了一个适配器来制作视图。但我不确定如何处理这个问题。

在我的 ListView 适配器的 getView 中,我膨胀了一个包含 YouTubeThumbnailView 的布局。根据文档(https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeThumbnailView)我应该调用初始化方法。

我想知道是否需要调用一次初始化方法,或者如果视图被 ListView 重用也调用此方法?没有办法检查 YouTubeThumbnailView 是否已经初始化?所以我想我应该多次调用它。但我不知道这是否允许?

【问题讨论】:

    标签: android youtube-api


    【解决方案1】:

    您应该只调用一次,但在初始化后保存对加载程序的引用。解决此问题的一种方法是保留从ViewYouTubeThumbnailLoader 的映射。在getView中,有3种情况:

    1. 视图是新的,需要初始化。
    2. 视图已经初始化并且我们有一个对加载器的引用。
    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;
    }
    

    在你的缩略图监听器中:

      @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);
      }
    

    【讨论】:

    • 我遇到了一些问题,因为我使用了错误的实现类作为 Map,但是当我把它整理出来时,它工作正常。感谢您的解决方案!
    猜你喜欢
    • 2013-12-04
    • 2013-11-07
    • 1970-01-01
    • 2016-11-25
    • 2019-01-05
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多