我有一个由FragmentStatePagerAdapter管理的ViewPager。在此viewpager的片段内,还有另一个使用PagerAdapter(名为GalleryAdapter)的viewpager。这个" GalleryAdapter"返回图像视图。
我不知道该怎么做。滚动时位图的内存会被释放,但实际上发生得很晚,我在一台设备上进行测试,分配的内存在90 MB内存中被清除。在垃圾收集之后,它再次以20 MB开始并且增长超过120 MB。最后我得到了一个内存异常。
我个人认为我应该回收位图。但是当我在imageview上的setimagebitmap之后回收图像时,我得到错误:尝试使用回收的位图。
我不想使用图书馆因为我想知道我做错了什么
public class GalleryAdapter: PagerAdapter
{
Context context;
List<ArticleImageVO> _data;
public GalleryAdapter (Context context)
{
this.context = context;
_data = new List<ArticleImageVO> ();
}
public override Java.Lang.Object InstantiateItem (Android.Views.ViewGroup container, int position)
{
ImageView imageView = new ImageView(context);
imageView.SetScaleType(ImageView.ScaleType.CenterCrop);
imageView.SetData (_data [position]);
((ViewPager) container).AddView(imageView, 0);
return imageView;
}
public override bool IsViewFromObject (Android.Views.View view, Java.Lang.Object @object)
{
return view == ((ImageView) @object);
}
public override void DestroyItem (Android.Views.ViewGroup container, int position, Java.Lang.Object @object)
{
BitmapDrawable bitmapDrawable = (BitmapDrawable)((ImageView)@object).Drawable;
if (bitmapDrawable != null && bitmapDrawable.Bitmap != null)
{
Bitmap bitmap = bitmapDrawable.Bitmap;
bitmap.Recycle ();
}
((ViewPager) container).RemoveView(((ImageView)@object) );
}
public override int Count
{
get
{
return _data.Count;
}
}
public void SetData(List<ArticleImageVO> data)
{
_data.Clear ();
_data.AddRange (data);
}
}
viewpager中包含上述图库viewpager的适配器:
public class ArticleDetailAdapter: FragmentStatePagerAdapter
{
NewsController _newsController = NewsController.Instance;
public ArticleDetailAdapter (FragmentManager fm) : base (fm)
{
}
public override Fragment GetItem (int position)
{
ArticleDetailFragment fragment = new ArticleDetailFragment ();
fragment.SetArguments(_newsController.ArticlesList[position]);
return fragment;
}
public override int Count
{
get
{
return _newsController.ArticlesList.Count;
}
}
}
上面ViewPagerAdapter中的片段: