2017-07-06 73 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

哦,當然。好吧,現在修好了。謝啦。 –