Images in RecyclerView

I am using RecyclerView on Android and I am having image problems.

I would like to display a list of images in a specific folder with their path names.

So this is mine row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

        <TextView
            android:id="@+id/my_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="test" />

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true" />

</LinearLayout>

In my adapter, I use this code to set the image of a string:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.mTextView.setText(mDataset[position]);
    holder.mImageView.setImageURI(Uri.parse("file://" + mMediaStorageDir.getPath() + "/" + mDataset[position]));
}

Images load fine, but when I scroll down, the whole application becomes very slow.

This does not happen if instead I download a small portable code. Is it because the pictures are too big?

+4
source share
3 answers

Yes. I think he is too big.

You need to download your images first (track for free memory) and then use it.

Picasso.

:

ItemData.java

package com.shustikov.android;

public class ItemData {

    private String title;
    private int imageUrl;

    public ItemData(String title,int imageUrl){

        this.title = title;
        this.imageUrl = imageUrl;
    }

    public String getTitle() {
        return title;
    }

    public int getImageUrl() {
       return imageUrl;
    }
}

RecyclerViewExampleAdapter.java

package com.shustikov.android;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class RecyclerViewExampleAdapter extends RecyclerView.Adapter<RecyclerViewExampleAdapter.ViewHolder> {
    private ItemData[] itemsData;

    public RecyclerViewExampleAdapter(ItemData[] itemsData) {
        this.itemsData = itemsData;
    }

    @Override
    public RecyclerViewExampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View itemLayoutView = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.item_layout, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
        viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
     }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtViewTitle;
        public ImageView imgViewIcon;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
            imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        }
    }


    @Override
    public int getItemCount() {
        return itemsData.length;
    }
}
+10

, . . , Picasso. , .

+3

. . Picasso, , .

:

public void bindPhoto(Photo photo) {
    mPhoto = photo;
    mPhotoFile=PhotoLab.get(getActivity()).getPhotoFile(mPhoto);
    Uri uri=Uri.fromFile(mPhotoFile);

    if(mPhotoFile==null || !mPhotoFile.exists()){
        int imgdrawable=R.drawable.ic_action_name3;
        mThumbnail.setImageDrawable(getResources().getDrawable(imgdrawable));
    } else {
        Picasso.with(getActivity()).load(uri).fit().into(mThumbnail);
    }


    mTitleTextView.setText(mPhoto.getTitle());
    String dateFormat = "EEE, MMM dd";
    dateString = DateFormat.format(dateFormat, mPhoto.getDate()).toString();
    mDateTextView.setText(dateString);
}
+1

All Articles