ListView 中的 ImageView 在启用 RecycleElement 的情况下简要显示上一个滚动图像

Posted

技术标签:

【中文标题】ListView 中的 ImageView 在启用 RecycleElement 的情况下简要显示上一个滚动图像【英文标题】:ImageView in ListView briefly shows previous image on scroll with RecycleElement enabled 【发布时间】:2016-05-11 12:58:59 【问题描述】:

我有以下课程的列表:

public class Set 
   public string IconUrl  get; set; 

此列表绑定到 ListView:

<ListView ItemsSource="Binding Sets">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <Image Source="Binding IconUrl" />
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

当视图加载并且用户开始滚动时,单元格会被重复使用,并且图像会在新图像被下载和渲染之前简要地显示之前的图像。

有没有办法在不禁用 RecycleElement 的情况下防止这种行为?

【问题讨论】:

你能制作一个小演示,我会仔细看看你有什么?如果是这样,我的详细信息在我的个人资料中。 【参考方案1】:

我还没有尝试过,但是在 ViewCell 上,您可以使用 DisappearingAppearing 事件。

您可能想看看在Disappearing 事件处理程序上释放图像源,但有时这可能会在稍后的某个时间发生,我想从回忆中,所以您可能还想尝试在Appearing 事件处理程序上释放图像希望在屏幕显示之前执行?

【讨论】:

我已经尝试过 Disappearing 事件,不幸的是,当我需要它时它并没有持续触发。我会尝试 Appearing 事件,但我猜会更糟;)【参考方案2】:

我们已经通过手动将图像源设置为 null 来强制渲染新图像来解决这个问题。我们通过使用 ListView 的 OnBindingContextChanged 事件来实现这一点。希望这会有所帮助。

已编辑(添加以下代码):

我们有这样的东西:

public class PeopleCell : ViewCell
...

Image profileImage;

public PeopleCell()

    profileImage = new Image
    
        VerticalOptions = LayoutOptions.CenterAndExpand,
        HorizontalOptions = LayoutOptions.CenterAndExpand,
        BackgroundColor = Color.FromHex("f5f5f5"),
        Source = ImageSource.FromFile("profile_blankimage"),
    ;...

protected override void OnBindingContextChanged()

    base.OnBindingContextChanged();
    people = BindingContext as CustomerViewModel;


    if(people.Customer.Avatar != null)
       profileImage.Source = ImageSource.FromUri(new Uri(people.Customer.Avatar.Url));

【讨论】:

如何从 OnBindingContextChanged 事件中引用图像?你有机会添加一些代码吗? 我添加了一些我们使用过的示例代码,希望对您有所帮助。 啊自定义 ViewCell,这意味着你没有使用 XAML 对吗? 不,没有 XAML,很抱歉我错过了。 能否包括将图像源设置为 null 的位置?我假设在 OnBindingContextChanged 中,但只是想确定一下。

以上是关于ListView 中的 ImageView 在启用 RecycleElement 的情况下简要显示上一个滚动图像的主要内容,如果未能解决你的问题,请参考以下文章

listitem中的Android listview imageview在滚动时隐藏

listitem中的Android listview imageview在滚动时隐藏

使用自定义适配器更改ListView中特定行中的ImageView

使用自定义适配器更改 ListView 中特定行中的 ImageView

android在listView的item中有一个ImageView,如何让每一个item中的ImageView显示不同的图片

Android:使用 parsequery 适配器在 listview 中更改 imageview 的图像