RecyclerViews的RecyclerView:图片加载

时间:2016-06-28 08:22:10

标签: android android-recyclerview android-image

我尝试实现一个包含垂直RecyclerView的布局,该布局本身包含多个水平RecyclerViews(想象一个新闻网站,有多个新闻栏目,每个部分包含多个可以滚动的新闻报道水平)。

横向RecyclerView包含ImageView(以及其他内容)ImageView。我正在寻找将网址中的图片加载到此 @Override public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.content_preview_list_item, null); ItemRowHolder mh = new ItemRowHolder(v); mh.recycler_view_list.setAdapter(new SectionListDataAdapter(mContext, listener, new ArrayList<ContentPreviewButtonItem>())); mh.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); return mh; } @Override public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) { Log.d("RecyclerViewDataAdapter", "onBindViewHolder"); final String sectionName = dataList.get(i).getTitle(); ArrayList singleSectionItems = dataList.get(i).getItems(); itemRowHolder.itemTitle.setText(sectionName); ((SectionListDataAdapter)itemRowHolder.recycler_view_list.getAdapter()).setItemList(singleSectionItems); itemRowHolder.recycler_view_list.getAdapter().notifyDataSetChanged(); itemRowHolder.recycler_view_list.setHasFixedSize(true); } 的最佳策略。

首先,我的代码。外部RecyclerView的适配器:

    @Override
    public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        Log.d("SectionListDataAdapter", "onCreateViewHolder");
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.content_preview_item, null);
        SingleItemRowHolder mh = new SingleItemRowHolder(v);
        return mh;
    }

    @Override
    public void onBindViewHolder(SingleItemRowHolder holder, int i) {

        Log.d("SectionListDataAdapter", "onBindViewHolder");
        ContentPreviewButtonItem singleItem = itemsList.get(i);

        Uri imageUri = Uri.parse(singleItem.getImageUrl());
        holder.itemImage.setImageURI(imageUri); //itemImage is a SimpleDraweeView

    }

对于包含图像的内部RecyclerView:

RecyclerViews

虽然此代码在移动设备上运行良好,但是当同时加载多个内部SimpleDraweeView和图像时,平板电脑会出现明显的延迟。现在我使用Facebook的Fresco库将图像加载到OutOfMemoryException。我也试过Picasso,但是当必须一次加载多个图像时,它会产生RecyclerViews。 我通过将内部onCreateViewHolder的适配器创建移动到onBindViewHolder而不是outerHTML来改进性能,但滞后仍然很明显。

在此方案中加载图像的最佳策略或库是什么。 谢谢

2 个答案:

答案 0 :(得分:0)

Glide非常适合我相信使用哪个可以在图像加载时调整图像大小你可以显示相同的缩略图

答案 1 :(得分:0)

我在我的项目中也这样做,到目前为止,我得到的最好的服务来自Picasso库。他们的调整能力是最好的。第一次加载时可能会有点慢,但后续加载速度非常快。