Xamarin。在listview中使用图像时出现OutOfMemory错误

时间:2014-10-08 09:28:59

标签: listview out-of-memory xamarin.forms

我有一个列表视图,我想显示从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找到),但不幸的是它仍然无法第一次加载。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

您的图片可能太大了,不是文件大小的意义,而是这些文件的位图表示。

您应该使用较小的图像,或实现在运行时为您执行此操作的自定义单元格渲染器。请参阅Xamarin文章Load Large Bitmaps Efficiently