ImageViewと TextView をそれぞれ含む複数の項目をGridViewに入力しています。そのような項目は約 100 以上あります。問題は、すべてが適切に実行されていますが、スクロール中にアクティビティが大幅に遅れていることです。画像サイズを制限してビットマップを効率的に読み込もうとしましたが、改善はありませんでした。
また、私の画像のソースは Local Filesystem であり、Category.getCategoryUrl() にはファイルパスが含まれていることにも注意してください。
ここに私のArrayAdapter実装があります:
public class RootCategoryAdapter extends ArrayAdapter<Category> {
private int resource;
private Context context;
private ArrayList<Category> categoryList;
private DisplayMetrics metrics;
public RootCategoryAdapter(Context context, int resource,
ArrayList<Category> categoryList, DisplayMetrics metrics) {
super(context, resource, categoryList);
// TODO Auto-generated constructor stub
this.context = context;
this.resource = resource;
this.categoryList = categoryList;
this.metrics = metrics;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
CategoryHolder holder = null;
if (convertView == null) {
// LayoutInflater inflater =(LayoutInflater)
// context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(resource, parent, false);
holder = new CategoryHolder();
holder.title = (TextView) convertView
.findViewById(R.id.root_category_text);
holder.image = (ImageView) convertView
.findViewById(R.id.root_category_image);
convertView.setTag(holder);
} else {
holder = (CategoryHolder) convertView.getTag();
}
Category category = categoryList.get(position);
holder.title.setText(category.getCategoryName());
// I think problem starts here but not certain
holder.options = new BitmapFactory.Options();
holder.options.inJustDecodeBounds = true;
holder.bitmap = BitmapFactory.decodeFile(category.getCategoryUrl(),
holder.options);
holder.options.inJustDecodeBounds = false;
holder.options.inSampleSize = BasicChores.calculateInSampleSize(
holder.options, 200, 200);
holder.bitmap = BitmapFactory.decodeFile(category.getCategoryUrl(),
holder.options);
holder.image.setImageBitmap(holder.bitmap);
return convertView;
}
static class CategoryHolder {
Bitmap bitmap;
BitmapFactory.Options options;
TextView title;
ImageView image;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return categoryList.get(position).getCategoryId();
}
@Override
public Category getItem(int position) {
// TODO Auto-generated method stub
return categoryList.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return categoryList.size();
}
@Override
public int getPosition(Category item) {
// TODO Auto-generated method stub
return categoryList.indexOf(item);
}
}