我有一个列表视图,我想显示从URL加载的每个项目的图像。如果我使用ImageCell作为DataTemplate,它将加载一次,然后如果我再次尝试加载,我将得到一个OutOfMemory错误。
接下来,我在http://developer.xamarin.com/guides/cross-platform/xamarin-forms/introduction-to-xamarin-forms/尝试了Xamarin表单简介页面中的代码来创建自定义ViewCell
class MyViewCell : ViewCell
{
public MyViewCell()
{
var image = new MyImage
{
HorizontalOptions = LayoutOptions.Start
};
image.SetBinding(Image.SourceProperty, new Binding("ImagePath"));
image.WidthRequest = image.HeightRequest = 40;
var nameLayout = CreateLayout();
var viewLayout = new StackLayout()
{
Orientation = StackOrientation.Horizontal,
Children = { image, nameLayout }
};
View = viewLayout;
}//end constructor
static StackLayout CreateLayout()
{
var titleLabel = new Label
{
HorizontalOptions= LayoutOptions.FillAndExpand,
TextColor = Color.FromRgb(0, 110, 128)
};
titleLabel.SetBinding(Label.TextProperty, "Title");
var detailLabel = new Label
{
HorizontalOptions = LayoutOptions.FillAndExpand
};
detailLabel.SetBinding(Label.TextProperty, "Detail");
var layout = new StackLayout()
{
HorizontalOptions = LayoutOptions.StartAndExpand,
Orientation = StackOrientation.Vertical,
Children = { titleLabel, detailLabel }
};
return layout;
}
}
但是第一次不会加载偶数加载列表
我尝试了Avrohom的代码(在Xamarin.Forms ListView OutOfMemoryError exception on Android找到),但不幸的是它仍然无法第一次加载。
有没有人有任何想法?
答案 0 :(得分:2)
您的图片可能太大了,不是文件大小的意义,而是这些文件的位图表示。
您应该使用较小的图像,或实现在运行时为您执行此操作的自定义单元格渲染器。请参阅Xamarin文章Load Large Bitmaps Efficiently。