我正在使用 YouTube Android Player API 在我的应用程序中播放视频。我正在尝试显示视频的缩略图,当有人点击缩略图时,将播放视频。
主要 Activity 有一个 ListView ,我正在尝试将视频缩略图添加到此 ListView 。
我为此创建了自定义适配器,
public class MySimpleArrayAdapter extends ArrayAdapter<String> implements YouTubeThumbnailView.OnInitializedListener {
private final Context context;
private final ArrayList<String> values;
int videoPosition=0;
private YouTubeThumbnailLoader youTubeThumbnailLoader;
String API_KEY="MYKEY";
public MySimpleArrayAdapter(Context context, ArrayList<String> values) {
super(context, R.layout.thumbnail, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@SuppressLint("ViewHolder") View rowView = inflater.inflate(R.layout.thumbnail, parent, false);
videoPosition=position;
YouTubeThumbnailView youTubeThumbnailView = (YouTubeThumbnailView)rowView.findViewById(R.id.thumb);
youTubeThumbnailView.initialize(API_KEY, this);
return rowView;
}
@Override
public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader thumbnailLoader) {
youTubeThumbnailLoader=thumbnailLoader;
thumbnailLoader.setOnThumbnailLoadedListener(new ThumbnailLoadedListener());
youTubeThumbnailLoader.setVideo(values.get(videoPosition));;
}
@Override
public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
}
private final class ThumbnailLoadedListener implements
YouTubeThumbnailLoader.OnThumbnailLoadedListener {
@Override
public void onThumbnailError(YouTubeThumbnailView arg0, YouTubeThumbnailLoader.ErrorReason arg1) {
}
@Override
public void onThumbnailLoaded(YouTubeThumbnailView arg0, String arg1) {
}
}
}
我将此适配器设置为 ListView ,并将三个视频 ID(作为 ArrayList)传递给此适配器,但问题是每当行 youTubeThumbnailLoader.setVideo(values.get(videoPosition) )
被执行,变量 videoPosition
为 2 并且它为所有视频设置相同的缩略图。
我想可能是适配器没有等到缩略图被加载并快速渲染所有行(因为 videoPosition 的值达到最终值)我尝试添加 'while(isWait);'在 return rowview
之前(我在 onThumbnailLoaded
和 onThumbnailError
函数中将 isWait 设置为 true,并且 isWait 是一个 AtomicBoolean )但它没有用。
谁能告诉我为什么会这样以及如何解决这个问题?
谢谢你:)
最佳答案
在这一行 youTubeThumbnailView.initialize(API_KEY, this);
中,您正在设置 this
以实现 YouTubeThumbnailView.OnInitializedListener
。
而是将这一行改成这样
youTubeThumbnailView.initialize(API_KEY, new YouTubeThumbnailView.OnInitializedListener(){
//override methods here..
});
您可能需要将 videoPosition
声明为 final。
希望这行得通...
关于Android 如何显示 YouTube 缩略图的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315961/