Reputation: 57
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
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
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
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