Marcellino247
Marcellino247

Reputation: 57

Android - ViewHolder in Gridview not working

I am new in programming ad I'm on my first app, so excuse me for my ignorance... and also for my english.

I have a GridView with images, and i'm trying to implement a ViewHolder to improve performance.

Here's the code. xml for imageView dimensions:

 <ImageView
        android:layout_width="wrap_content"
        android:layout_height="@dimen/grid_view_item_height"
        android:id="@+id/immagineGriglia" />

and the java code of the imageAdapter:

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ImageAdapterAdulti15 extends ArrayAdapter {
    private Context context;
    private int layoutResourceId;
    private ArrayList data = new ArrayList();

        // Keep all Images in array
    public Integer[] mThumbIds = {
            R.drawable.image1, R.drawabla.image2........
    };

    // Constructor
    public ImageAdapterAdulti15(Context context, int layoutResourceId, ArrayList data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {
        View cella = convertView;
        ViewHolder holder = null;

        if (cella == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            cella = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.immagineGriglia = (ImageView) cella.findViewById(R.id.immagineGriglia);
            cella.setTag(holder);
        } else {
            holder = (ViewHolder) cella.getTag();
        }

        ImageItem item = (ImageItem) data.get(position);
        holder.immagineGriglia.setImageBitmap(item.getImage());
        return cella;
    }

    static class ViewHolder {
        ImageView immagineGriglia;     
    }    
    }

But with this code the gridView is slower than before, without ViewHolder.

I think this code in incorrect or incomplete. Someone can help to fix it? Thanks...

Upvotes: 0

Views: 1686

Answers (3)

udayatom
udayatom

Reputation: 126

Recyclerview accelarted rather than ListView.This will definitely helps you :)

public class HomeRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {


private List<String> mItemList;

RecyclerView mRecyclerView;

Context context;
HomeItemViewHolder mHomeItemholder;

public HomeRecyclerAdapter(List<String> itemList) {
    mItemList = itemList;
}


public class HomeItemViewHolder extends RecyclerView.ViewHolder {

    ImageView mImage;


    public HomeItemViewHolder(View parent) {
        super(parent);

        mImage = (ImageView) parent.findViewById(R.id.Image); 

    }

}

public HomeRecyclerAdapter(List<String> itemList, Context context, RecyclerView mRecyclerView) {
    this.mItemList = itemList;
    this.context = context;
    this.mRecyclerView = mRecyclerView;


}

Upvotes: 0

Hiren Patel
Hiren Patel

Reputation: 52800

Your drawable array

 Integer[] mThumbIds = {R.drawable.image_one, R.drawable.image_two, R.drawable.image_three};

Your getView of ArrayAdapter

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

 View cella = convertView;
 ViewHolder holder = null;

  if (cella == null) {
    LayoutInflater inflater = ((Activity) context).getLayoutInflater();
    cella = inflater.inflate(layoutResourceId, parent, false);
    holder = new ViewHolder();
    holder.immagineGriglia = (ImageView) cella.findViewById(R.id.immagineGriglia);
    cella.setTag(holder);
  } else {
    holder = (ViewHolder) cella.getTag();
  }

 ImageItem item = (ImageItem) data.get(position);
 holder.immagineGriglia.setImageDrawable(context.getResources().getDrawable(mThumbIds[position]));
 return cella;
 }

Done

Upvotes: 1

Samir Bhatt
Samir Bhatt

Reputation: 3261

Scrollview become slower because you are using bitmap. You should use image path as a string and then you can load image using any imageloader library like Universal image loader or picasso.

Upvotes: 0

Related Questions