【问题标题】:Prevent flickering of visible UICollectionView cells防止可见 UICollectionView 单元格闪烁
【发布时间】:2016-07-30 07:09:29
【问题描述】:

我正在使用绑定到 ViewModel 中的自定义 ObservableCollection 的无限滚动 UICollectionView。该单元格只有一个 UITextView,它数据绑定到模型对象中的字符串属性。

当我开始向下滚动时,我通过调用 OservableCollection 上的 AddRange 来显示更多项目。

public class MyCollection<T> : ObservableCollection<T>
{
    public MyCollection()
        : base()
    {
    }

    public MyCollection(IEnumerable<T> collection)
        : base(collection)
    {
    }

    public MyCollection(List<T> list)
        : base(list)
    {
    }

    public void AddRange(IEnumerable<T> range)
    {
        foreach (var item in range)
        {             
            Items.Add(item);
        }

        var dispatcher = Mvx.Resolve<IMvxMainThreadDispatcher>();
        dispatcher.RequestMainThreadAction(() =>
        {
            this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
            this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
            this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, range));
        });
    }
}

新项目已成功添加,但是一旦从通知更改事件重新加载集合视图,可见单元格项目可能会闪烁并在一瞬间显示错误的数据。加载更多数据到 UICollectionView 时是否可以防止可见单元格闪烁?

【问题讨论】:

  • 你要重新加载整个collectionview吗?不要那样做。只需添加新闻单元格
  • @Paulw11 感谢您的建议。是的,我假设 propertyChangeEvent 触发了整个 collectionview 的重新加载。你知道我怎么只能触发不可见的新单元格的重新加载吗?我可以调用 collectionView.ReloadItems(indexPaths[]) 但我不知道如何检索新项目的索引路径。

标签: ios xamarin mvvmcross


【解决方案1】:

您可以通过执行以下操作创建 IndexPath[] 数组以传递给 collectionView.ReloadItems(indexPaths[])

public void AddRange(IEnumerable<T> range)
{
    ...
    ...
    ...

    var originalCount = Count;

    foreach (var item in range)
    {             
        Items.Add(item);
    }

    List<NSIndexPath> reloadPaths = new List<NSIndexPath>();
    for (int i = originalCount; i < Count-1; i++) {
        reloadPaths.Add(NSIndexPath.FromRowSection(i, 0));
    }

    ...
    ...
    ...
}

然后就可以执行collectionView.ReloadItems(reloadPaths.ToArray())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多