У меня есть вид пейджер и адаптер страницы следующим образом:
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, чтобы избежать проблем с памятью. Есть ли способ добиться этого?