2016-06-28 27 views
1

それ自身が複数の水平RecyclerViewsを含む垂直RecyclerViewを含むレイアウトを実装しようとしています(複数のニュースセクションを持つニュースサイトを想像してください、各セクションには水平にスクロールできる複数のニュース記事があります) 。RecyclerViewのRecyclerView:画像読み込み

水平RecyclerViewは(とりわけ)ImageViewを含んでいます。私はURLからの画像をこの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用:外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 

    } 

このコードは、携帯電話で素晴らしい作品ものの場合に、複数の内部RecyclerViews、タブレット上の顕著な遅れがありますし、画像は一度に読み込まれます。今はFacebookのFrescoライブラリを使って画像をSimpleDraweeViewに読み込みます。私もピカソを試しましたが、複数の画像を一度に読み込まなければならないときはOutOfMemoryExceptionになります。 内部のRecyclerViewsのアダプタ作成をonBindViewHolderの代わりにonCreateViewHolderに移動してパフォーマンスを改善しましたが、遅れはまだ目立ちます。

このシナリオでは、画像を読み込むのに最適な戦略またはライブラリは何ですか。 おかげ

+0

グライドは、私がどのを使用して信じている。このために最適です画像がロードされている間に画像のサイズを変更することもできますが、同じサムネイルを表示することもできます – silverFoxA

+0

Picassoを使用して同じことができます。私はGlideを使用することでパフォーマンスの向上が期待できるとは思えません。または、ピカソ、フレスコなどの代わりにグライドをお勧めする理由はありますか? – Androidicus

+0

私は長い間グライドを使用しています。キャッシングがあり、大きな画像処理能力は本当に驚くべきです。 – silverFoxA

答えて

0

グライドは、画像をロードしているときにも、画像のサイズを変更することができますが、同じ

のサムネイルを表示することができ、私が使用して信じている。このために最適です