Reputation: 303
Hey in this program I have set a GridView according to the text it has but when running the app the app lags alot on the emulator as well as on the device. And the error
"The application may be doing too much work on its main thread." is given I guess thats what causing the problem here.
Here is my ImageAdapter file
public class ImageAdapter extends BaseAdapter {
static class ViewHolder {
ImageView imageView;
TextView textView;
}
private Context context;
String mobile;
private final String[] mobileValues;
int[] imagesArr = new int[]{R.drawable.badminton, R.drawable.cricket, R.drawable.basketball, R.drawable.carrom,
R.drawable.handball, R.drawable.humanfoosball, R.drawable.kabaddi, R.drawable.khokho, R.drawable.chess,
R.drawable.longjump, R.drawable.streetsoccer, R.drawable.shotput, R.drawable.volleyball, R.drawable.tugofwar,
R.drawable.tabletennis, R.drawable.handball, R.drawable.rellayrace};
public ImageAdapter(Context context, String[] mobileValues) {
this.context = context;
this.mobileValues = mobileValues;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View row = convertView;
if (row == null) {
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//row = new View(context);
// get layout from grid_itemxml.xml
row = inflater.inflate(R.layout.grid_item, null);
// set value into textview
holder.textView = (TextView) row.findViewById(R.id.grid_item_label);
holder.textView.setText(mobileValues[position]);
// set image based on selected text
holder.imageView = (ImageView) row.findViewById(R.id.grid_item_image);
mobile = mobileValues[position];
if (mobile.equals("Badminton")) {
holder.imageView.setImageResource(imagesArr[0]);
}
if (mobile.equals("Cricket")) {
holder.imageView.setImageResource(imagesArr[1]);
}
if (mobile.equals("Basketball")) {
holder.imageView.setImageResource(imagesArr[2]);
}
if (mobile.equals("Carrom")) {
holder.imageView.setImageResource(imagesArr[3]);
}
if (mobile.equals("Handball")) {
holder.imageView.setImageResource(imagesArr[4]);
}
if (mobile.equals("Human Foosball")) {
holder.imageView.setImageResource(imagesArr[5]);
}
if (mobile.equals("Kabaddi")) {
holder.imageView.setImageResource(imagesArr[6]);
}
if (mobile.equals("Khokho")) {
holder.imageView.setImageResource(imagesArr[7]);
}
if (mobile.equals("Chess")) {
holder.imageView.setImageResource(imagesArr[8]);
}
if (mobile.equals("Longjump")) {
holder.imageView.setImageResource(imagesArr[9]);
}
if (mobile.equals("Streetsoccer")) {
holder.imageView.setImageResource(imagesArr[10]);
}
if (mobile.equals("Shotput")) {
holder.imageView.setImageResource(imagesArr[11]);
}
if (mobile.equals("Volleyball")) {
holder.imageView.setImageResource(imagesArr[12]);
}
if (mobile.equals("Tugofwar")) {
holder.imageView.setImageResource(imagesArr[13]);
}
if (mobile.equals("Table Tennis")) {
holder.imageView.setImageResource(imagesArr[14]);
}
if (mobile.equals("Relayrace")) {
holder.imageView.setImageResource(imagesArr[15]);
}
} else {
holder = (ViewHolder) row.getTag();
}
return row;
}
@Override
public int getCount() {
return mobileValues.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
Upvotes: 0
Views: 575
Reputation: 37404
The images inside your project are taking too much time to load the images, though the android memory resources are limited to app.There are couple of solution that you can try
The easy way is use image loading libraries. Try this link for details e.g
Picasso.with(context).load(R.drawable.drawableName).fit().centerCrop().into(imageViewFit)
Upvotes: 1