7

Google は Google 用の YouTube API をリリースしました。その API には、映画のサムネイルを表示するための YouTubeThumbnailView があります。ListView にサムネイルを表示したい。ビューを作成するためのアダプターを作成しました。しかし、これを処理する方法がわかりません。

ListView-adapter の getView で、YouTubeThumbnailView を含むレイアウトを膨らませます。ドキュメント (https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeThumbnailView) によると、初期化メソッドを呼び出す必要があります。

ビューが ListView によって再利用される場合、初期化メソッドを一度呼び出す必要があるのか​​ 、それともこれを呼び出す必要があるのか​​ 疑問に思っていますか?YouTubeThumbnailView が既に初期化されているかどうかを確認する方法はありませんか? だから私はそれを複数回呼び出す必要があると思います。しかし、それが許されるかどうかはわかりませんか?

4

1 に答える 1

17

一度だけ呼び出す必要がありますが、初期化されたらローダーへの参照を保存します。これに対処する1つの方法は、からViewへのマップを保持することYouTubeThumbnailLoaderです。には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;
}

そしてあなたの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);
  }
于 2012-12-27T11:23:52.697 に答える