私は YouTube API を使用して YouTube からビデオを再生しています(明らかに)。これはこれまでのところ非常にうまく機能しています。私が抱えている問題は、リスト ビューを使用してさまざまなビデオのタイトルとサムネイルを表示していることです。これには、カスタム アダプターと YouTubeThumbnailView が必要です。
現在、私が持っているコードは、サムネイルをロードしてマップに正しく保存するという点で十分に機能しますが、ビューが再作成され、サムネイルをマップから再度取得する必要がある場合、間違ったものが表示されることがあり、非常に頻繁に重複します.
アダプターコードは次のとおりです。
public class VideoListAdapter extends BaseAdapter implements
YouTubeThumbnailView.OnInitializedListener{
Map<View, YouTubeThumbnailLoader> mLoaders;
public VideoListAdapter(final Context context, final List<Video> list, final int layoutResourceId) {
mList = VideoManager.getInstance().getContentList();
this.mLayID = layoutResourceId;
this.mContext = context;
mList = list;
mLoaders = new HashMap<View, YouTubeThumbnailLoader>();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View mCurrentRow = convertView;
PostHolder holder;
String videoId = mList.get(position).videoId;
if(mCurrentRow == null)
{
LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
mCurrentRow = inflater.inflate(mLayID, parent, false);
holder = new PostHolder();
holder.txtTitle = (TextView)mCurrentRow.findViewById(R.id.list_content_title);
holder.txtTitle.setText(mList.get(position).title);
//Case 1 - Initalise the thumbnail
holder.thumb = (YouTubeThumbnailView) mCurrentRow.findViewById(R.id.list_content_thumb);
holder.thumb.setTag(videoId);
holder.thumb.initialize(Utils.DEVELOPER_KEY, this);
mCurrentRow.setTag(holder);
}
else
{
holder = (PostHolder) mCurrentRow.getTag();
YouTubeThumbnailLoader loader = mLoaders.get(holder.thumb);
//Set the title
Video post = mList.get(position);
if(post != null){
holder.txtTitle.setText(post.title);
}
if (holder.loader == null)
{
//Case 2 - Loader is currently initializing
holder.thumb.setTag(videoId);
} else
{
//Case 3 - The loader is already initialised
holder.thumb.setImageResource(R.drawable.ic_launcher);
holder.loader.setVideo(videoId);
}
}
return mCurrentRow;
}
@Override
public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) {
String videoId = (String) view.getTag();
mLoaders.put(view, loader);
view.setImageResource(R.drawable.ic_launcher);
loader.setVideo(videoId);
}
@Override
public void onInitializationFailure(
YouTubeThumbnailView thumbnailView, YouTubeInitializationResult errorReason) {
if (errorReason.isUserRecoverableError()) {
if (errorDialog == null || !errorDialog.isShowing()) {
//errorDialog = errorReason.getErrorDialog(, RECOVERY_DIALOG_REQUEST);
errorDialog.show();
}
} else {
/*String errorMessage =
String.format(getString(R.string.error_thumbnail_view), errorReason.toString());
Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();*/
}
}
static class PostHolder
{
YouTubeThumbnailView thumb;
YouTubeThumbnailLoader loader;
TextView txtTitle;
TextView txtTime;
}
ドキュメントを読み、サンプル アプリケーションを調べましたが、役立つ情報が見つかりませんでした。これは YT API の問題ではなく、ImageView の保存方法に問題がある可能性があります。
誰かが何か助けを提供できるなら、私は感謝します、前もって感謝します。