xamarin列表视图没有填充

时间:2017-07-06 00:56:16

标签: c# android asynchronous xamarin

我有点卡在这里。我有一个显示列表视图的片段。我想加载构成该列表视图异步的项目。我是这样做的:

 public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // do other stuff here
        Task.Run(async () =>
        {
            _items = await GetItems();
            _listView.Adapter = new FooAdapter(Activity, _items);
        });

        return view;
    }

但即使项目已填充,列表视图也永远不会在ui中更新。当我对SwipeRefreshLayout做同样的事情时,它可以正常工作。

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    _refresher = view.FindViewById<SwipeRefreshLayout>(Resource.Id.refresher);
    _refresher.Refresh += async delegate {
        _items = await GetItems(true);
        _refresher.Refreshing = false;
        _listView.Adapter = new RecipeListAdapter(Activity, _items);
    };
};

所以最初视图是空的,但是当我下拉时,刷新视图工作,列表被填充,我的列表视图显示出来。我无法弄清楚为什么第一种方法不起作用。

作为参考,我的GetItems看起来像这样:

private async Task<List<Summary>> GetItems(bool clear = false)
{
        if (clear)
        {
            _items.Clear();
        }

       return await _service.GetItems(Token);           
}

1 个答案:

答案 0 :(得分:1)

在第二个示例中,您正在调用一个委托,该委托使用await在设置适配器之前填充_items变量。但这受到_refresher.Refresh

的约束

在第一个示例中,您正在异步运行Task以获取数据,但是在检索数据之前返回视图。除非某些事情要刷新该视图中的数据,否则它应该如何改变?