Reputation: 63
I'm new to Android Development, I ran into a performance issue. When my GridView has too many items it becomes kinda slow. Is there any way to make it behave a little faster?
Here is the code im using:
Adapter:
public class CharactersAdapter extends BaseAdapter {
private Context mContext;
private int screenSize;
private int columns;
// Constructor
public CharactersAdapter(Context c,int screenSize) {
this.screenSize=screenSize;
mContext = c;
}
public CharactersAdapter(Context c) {
mContext = c;
}
@Override
public int getCount() {
return charPics.length;
}
@Override
public Object getItem(int i) {
return charPics[i];
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
ImageView imageView;
this.columns=mContext.getResources().getInteger(R.integer.grid_columns);
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(screenSize /this.columns,screenSize /this.columns));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}else{
imageView = (ImageView) convertView;
}
imageView.setImageDrawable(mContext.getResources().getDrawable(charPics[i]));
return imageView;
}}
Fragment
public class CharacterFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
View rootView = inflater.inflate(R.layout.fragment_character, container, false);
GridView gridview = (GridView)rootView.findViewById(R.id.gridview);
gridview.setAdapter(new CharactersAdapter(getActivity(),screenWidth));
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Intent i = new Intent(getActivity().getApplicationContext(), CharacterActivity.class);
// Pass image index
i.putExtra("pos", position);
startActivity(i);
}
});
return rootView;
}
Am I doing something wrong?....
Upvotes: 1
Views: 2128
Reputation: 63
I ended up using the Picasso library to load images. It works like a charm.
Upvotes: 0
Reputation: 4774
I really recomend you to use the Holder Pattern there, in it you save the view you create to be reused and save memory what will deliver more performance, here is a very good tutorial on it. Also for the images loading you could use Universal Image Loader that will make the Image loading UIL asynchronously so your UI Thread dont come up slow. Good Luck
Upvotes: 3