首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Picasso/Glide只从youtube搜索结果加载6个缩略图

Picasso/Glide只从youtube搜索结果加载6个缩略图
EN

Stack Overflow用户
提问于 2015-08-19 22:19:25
回答 2查看 1K关注 0票数 1

我正试图在一个列表视图中加载youtube搜索结果的缩略图。但我只得到了前6个缩略图,其余的imageViews充满了黑色方块,如果我使用毕加索和白色方块,如果我使用幻灯片。

以下是我的自定义数组适配器:

代码语言:javascript
复制
        class MyListAdapter extends ArrayAdapter<Item>{
            public MyListAdapter(){
                super(SearchResult.this, R.layout.item_view, myItems);
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View itemView = convertView;
                if (itemView==null){
                    itemView = getLayoutInflater().inflate(R.layout.item_view,parent,false);
                }

                Item currentItem = myItems.get(position);
                TextView title = (TextView) itemView.findViewById(R.id.tvTitle);
                title.setText(currentItem.getTitle());

                TextView uploader = (TextView) itemView.findViewById(R.id.tvUploader);
                uploader.setText(currentItem.getUploader());

                TextView timeNView = (TextView) itemView.findViewById(R.id.tvTimeNView);
                timeNView.setText(currentItem.getTimeNView());

                TextView duration = (TextView) itemView.findViewById(R.id.tvDuration);
                duration.setText(currentItem.getDuration());

                ImageView thumb = (ImageView) itemView.findViewById(R.id.imageView);


                Picasso.with(SearchResult.this).load(currentItem.getImageURL()).placeholder(R.drawable.placeholder).into(thumb);

                return itemView;
            }
        }

ImageView:

代码语言:javascript
复制
    <ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/imageView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-20 01:11:06

出现“黑色”视图是因为Picasso收到了空urls (请阅读下面的评论以进一步了解为什么会发生这种情况)。

下面是我建议的代码,包括结构的更改和问题的修复(最终由Eisenheim自己发现):

1。我没有扩展ArrayAdapter,而是扩展了BaseAdapter

2Context现在被传递给适配器的构造函数

3LayoutInflater只在构造函数中定义一次

4。静态Holders保存引用(R.id.imageViewR.id.tvDuration .)对观点

代码语言:javascript
复制
public class MyAdapter extends BaseAdapter {

    Context context;
    LayoutInflater inflater;
    ArrayList<Item> myItems;

    public MyAdapter(Context context, ArrayList<Item> myItems) {
        this.context = context;
        this.myItems = myItems;

        inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return myItems.size();
    }

    @Override
    public Object getItem(int position) {
        return myItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0; //'0' is the default return value, you may change this if necessary
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Holder holder;
        Item currentItem = (Item) getItem(position);

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_view, null);
            holder = new Holder();

            holder.title = (TextView) convertView.findViewById(R.id.tvTitle);
            holder.uploader = (TextView) convertView.findViewById(R.id.tvUploader);
            holder.timeNView = (TextView) convertView.findViewById(R.id.tvTimeNView);
            holder.duration = (TextView) convertView.findViewById(R.id.tvDuration);
            holder.thumb = (ImageView) convertView.findViewById(R.id.imageView);

            convertView.setTag(holder);

        } else {
            holder = (Holder) convertView.getTag();
        }

        holder.title.setText(currentItem.getTitle());
        holder.uploader.setText(currentItem.getUploader());
        holder.timeNView.setText(currentItem.getTimeNView());
        holder.duration.setText(currentItem.getDuration());

        Picasso.with(context).load("http://img.youtube.com/vi/" + 
                currentItem.getVideoId(‌​) + "/default.jpg").
                placeholder(R.drawable.placeholder).into(holder.thumb);

        return convertView;
    }

    static class Holder {
        TextView title, uploader, timeNView, duration;
        ImageView thumb;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2016-03-31 20:38:57

我建议您使用RecyclerView,因为它减少了系统的负载,因此您有更多的处理和内存来缓存更多的图像。确保您的图像不太大,或者使用Picasso或Glide中的选项将它们裁剪到您需要的大小,另外,正如前面的答案所述,调试以查看您没有设置空URL。

亲切的问候!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32106586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档