Android 如何显示 YouTube 缩略图的 ListView

标签 android android-youtube-api

我正在使用 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 之前(我在 onThumbnailLoadedonThumbnailError 函数中将 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/

相关文章:

android - 滚动具有两种布局的 ListView 时布局发生变化

android - 支持 fragment 管理器 .replace() 和 ViewModel

java - Android 多点触控问题

android - 布局在编辑器中看起来正确,在模拟器上看起来错误

Android Youtube API V3 在 Release+Proguard ON 时抛出异常

android - YouTube以编程方式上传视频

android - 检测 YouTube 视频何时播放完毕

android - 从 android 中的 youtube 视频中抓取帧?

Android 4.4 KitKat 随机崩溃( native 崩溃在/system/lib/libc.so)

android - 除非滚动,否则 ListView 图像不会改变