【发布时间】:2019-06-13 01:55:23
【问题描述】:
我有一个包含两列的 ListView,其中最左边包含一个 <Image>,如下所示:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*" />
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<AbsoluteLayout Grid.Column="0" Grid.Row="0">
<Image
HeightRequest="130"
Aspect="AspectFill"
Source="{Binding DynamicOfferImage}"
local:ImageBinding.URL="{Binding DynamicOfferURL}"
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All">
<Image.Aspect>
<OnPlatform x:TypeArguments="Aspect">
<On Platform="iOS">AspectFit</On>
<On Platform="Android">AspectFit</On>
</OnPlatform>
</Image.Aspect>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnImageTapGestureRecognized"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<StackLayout IsVisible="{Binding IsRedeemed}" Margin="20" AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All">
<ContentView Padding="3" BackgroundColor="#d9534f">
<Label Text="{loc:_ S=LoginIsRedeemed}" FontSize="Medium" TextColor="#ffffff" HorizontalOptions="Center"></Label>
</ContentView>
</StackLayout>
</AbsoluteLayout>
<StackLayout Grid.Column="1" Grid.Row="0">
<!-- Text here, irrelevant to question -->
</StackLayout>
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<Image> 的 Source 属性绑定到托管在 Amazon S3 上的 JPEG 图像的 URL。问题是大部分时间这些图片都可以正常下载,但是有时一张图片,甚至所有图片都不会下载(或不会显示?)
在用户重新安装应用程序之前,此问题不会消失。即使重新启动应用程序也不算数,它必须是实际的重新安装。
非常感谢任何帮助!
注意:这不是Xamarin Forms ListView Images Sometimes Displays, Sometimes Doesn't (UWP) 的重复,因为描述的场景不同。
【问题讨论】:
-
local:ImageBinding.URL="{Binding DynamicOfferURL}"是什么?会不会干扰图像显示?对我来说,似乎存在某种竞争条件,例如,如果图像下载失败,图像不会显示,或者从 AWS 获取图像的请求有时只是超时。您可以尝试将所需的图像下载并缓存到本地文件,然后将该文件用作图像的源。这样可以更好的观察图片的http请求,下载失败后重试。 -
local:ImageBinding.URL只是一个自定义绑定,我用来通过点击手势添加外部链接,从视图模型绑定。每个列表项总是有一个绑定的 URL,用于链接到所显示项目的网站版本。出于这个原因,我怀疑它与这个问题有关。感谢您的建议,如果没有更简单的解决方案,我可能会尝试一下。 -
你为什么不用ffimageloading?
-
图片下载完成后,是否更新主线程的imageView?
-
我没有下载图像然后进行设置,我只是将 XAML 中的图像源设置为 S3 中图像的 URL。图片自动下载并显示
标签: c# xamarin xamarin.forms xamarin.ios xamarin.android