【发布时间】: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