我有一个查看寻呼机和页面适配器,如下所示:
public class QuotePagerAdapter extends PagerAdapter {
Activity context;
JsonArray templates;
JsonArray mainQuotesArray;
private List<Bitmap> generateList;
QuotePagerAdapter(Activity context, JsonArray templates, JsonArray mainQuotesArray) {
this.templates = templates;
this.mainQuotesArray = mainQuotesArray;
generateList = new ArrayList<>();
this.context = context;
generateAutoQuote();
}
@Override
public int getCount() {
return generateList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView) object);
}
@Override
public int getItemPosition(Object object) {
if (generateList.contains((View) object)) {
return generateList.indexOf((View) object);
} else {
return POSITION_NONE;
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Log.i("SIZE", String.valueOf(generateList.size()));
Log.i("POS", String.valueOf(position));
if (generateList.size() <= position) {
return null;
}
Bitmap image = generateList.get(position);
ImageView imageView = new ImageView(context);
RelativeLayout.LayoutParams imageLayout = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
imageLayout.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
imageView.setLayoutParams(imageLayout);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setImageBitmap(image);
imageView.setMaxHeight(image.getHeight());
imageView.setMaxWidth(image.getWidth());
((ViewPager) container).addView(imageView, 0);
if (position + 1 == generateList.size()) {
generateAutoQuote();
notifyDataSetChanged();
}
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((ImageView) object);
}
public void generateAutoQuote() {
// code to generate a bitmap and add to list
generateList.add(bitmapOut);
}
}
现在
if (position + 1 == generateList.size()) {
generateAutoQuote();
notifyDataSetChanged();
}
此代码将生成图像并将其添加到列表,然后在数据将要消耗时调用notifyDataSetChanged
。因此,我实现了对数据的无限刷卡。
现在,当我将位图存储在列表中时,随着用户在其中滑动位图,位图的大小会增加,在某个时间点会发生内存溢出。因此,我正在考虑在列表达到阈值时删除第一项。例如:
如果列表大小为20,我将删除第一项并致电notifyDataSetChanged
因此,我可以将列表大小始终保持在20以内,以避免出现内存问题。有什么办法可以做到这一点?