一度だけ呼び出す必要がありますが、初期化後はローダーへの参照を保存してください。これに対処する1つの方法は、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);
}
私は地図として間違った実装クラスを使用するので、私は、いくつかの問題を抱えていたが、私は整理することを得たとき、それが正常に動作します。解決していただきありがとうございます! –
完璧な、魅力的な作品 – khurramengr