2012-12-26 12 views
6

GoogleはGoogleのYouTube APIをリリースしました。そこでは、apiはムービーのサムネイルを表示するためのYouTubeThumbnailViewです。 サムネイルをListViewに表示したい。私はビューを作るためにアダプタを作った。しかし、私はどのようにこれを処理するか分からない。YouTubeThumbnail ListViewの表示

私のListViewアダプターのgetViewでは、YouTubeThumbnailViewを含むレイアウトを膨張させます。ドキュメント(https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeThumbnailView)に従って、initializeメソッドを呼び出す必要があります。

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

答えて

16

一度だけ呼び出す必要がありますが、初期化後はローダーへの参照を保存してください。これに対処する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); 
    } 
+0

私は地図として間違った実装クラスを使用するので、私は、いくつかの問題を抱えていたが、私は整理することを得たとき、それが正常に動作します。解決していただきありがとうございます! –

+0

完璧な、魅力的な作品 – khurramengr

関連する問題