【问题标题】:xamarin list view not populatingxamarin 列表视图未填充
【发布时间】:2017-07-06 00:56:15
【问题描述】:

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

 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);           
}

【问题讨论】:

    标签: c# android asynchronous xamarin


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2013-08-20
      相关资源
      最近更新 更多