2017-07-06 51 views
0

我有点卡在这里。我有一个显示列表视图的片段。我想加载组成该列表视图异步的项目。我这样做: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

在第二个例子中,你在呼唤它使用await设置适配器之前填充_items变量的委托。但是这是绑定的_refresher.Refresh

在第一个示例中,您正在异步运行Task以获取数据,但您在检索数据之前返回视图。除非有人在这个观点中刷新数据,它应该如何改变?

+0

哦,当然。好吧,现在修好了。谢啦。 –