首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现ISupportIncrementalLoading接口-Windows10UWP

实现ISupportIncrementalLoading接口-Windows10UWP
EN

Stack Overflow用户
提问于 2016-01-22 18:28:55
回答 1查看 1.3K关注 0票数 0

我尝试实现ISupportIncrementalLoading接口,因为当scrollbar结束时,会在其他URL中加载更多项。

示例(预期的场景):我的第一个请求给了我一个项目列表和一个NextURL。下一个URL需要加载更多的项目,直到页面被填满。当我按下滚动条时,加载更多的项目。

问题:这个工作只在低分辨率的屏幕上完美,当我用1680x1050测试我的第二个屏幕时,在第一次请求后没有加载更多的项目(这个请求给了我一个NextUrl)。

我尝试实现这一点:https://marcominerva.wordpress.com/2013/05/22/implementing-the-isupportincrementalloading-interface-in-a-window-store-app/

我之前提到的代码不同页面的一部分:

代码语言:javascript
复制
    private string NextUrl { get; set; }
    private int currentPage;
    private object MyData{ get; set; }

    public bool HasMoreItems
    {
        get {
           return hasMoreItems; 
        }
    }

    public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count = 0)
    {

        var dispatcher = Window.Current.Dispatcher;

        return Task.Run<LoadMoreItemsResult>(
            async () =>
            {

                var result = await this.Source.GetPage(this.MyData, this.NextUrl , this.CurrentPage++);

                if (string.IsNullOrEmpty(result.NextUrl ))
                    hasMoreItems = false;
                else
                    hasMoreItems = true;

                if (result != null || result.Items.Count() == 0 )
                {
                    this.NextUrl = result.NextUrl ;
                    resultCount = (uint)result.Items.Count();

                    await dispatcher.RunAsync(
                        CoreDispatcherPriority.Normal,
                        () =>
                        {
                            foreach (ItemType item in result.Items)
                                this.Add(item);
                        });

                    return new LoadMoreItemsResult() { Count = resultCount };
                }
            }).AsAsyncOperation<LoadMoreItemsResult>();
    }

谁来帮帮我好吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-01-22 19:03:47

出现这个问题是因为第一个请求中的条目数量没有填满整个屏幕,所以在第一个请求完成之前,LoadModeItemsAsync()会被快速调用两次(或更多)。

为了处理这个问题,我会添加一个boolean标记,在开始获取数据时设置为true,在完成任务时设置为false。在加载函数开始时,您只需检查此值是否设置为false,然后再开始下载更多数据。

代码语言:javascript
复制
private string NextUrl { get; set; }
private int currentPage;
private object MyData { get; set; }

private bool _isLoading = false;

public bool isLoading
{
    get { return _isLoading; }
    set { _isLoading = value; }
}

public bool HasMoreItems
{
    get
    {
        return hasMoreItems;
    }
}

private async Task<LoadMoreItemsResult> LoadDataAsync()
{

    if (!isLoading)
        isLoading = true;
    else
        return new LoadMoreItemsResult { Count = (uint)this.Count };

    var result = await this.Source.GetPage(this.MyData, this.NextUrl, this.CurrentPage++);

    if (string.IsNullOrEmpty(result.NextUrl))
        hasMoreItems = false;
    else
        hasMoreItems = true;

    if (result != null || result.Items.Count() == 0)
    {
        this.NextUrl = result.NextUrl;
        resultCount = (uint)result.Items.Count();

        await dispatcher.RunAsync(
            CoreDispatcherPriority.Normal,
            () =>
            {
                foreach (ItemType item in result.Items)
                    this.Add(item);
            });
    }
    isLoading = false;

    return new LoadMoreItemsResult { Count = (uint)this.resultCount }; ;
}

public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count = 0)
{
    return LoadDataAsync().AsAsyncOperation<LoadMoreItemsResult>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34944439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档