2016-07-27 86 views
0

Hy,我想在我的Xamarin.Android應用程序中顯示與我的RecyclerView的SQLite.net查詢的結果。當執行查詢時,同步everythin工作正常。但是當我異步執行它時,Recyclerview將不會顯示。我檢查了查詢的結果,它包含所有預期的條目。 這工作:ToListAsync()後顯示RecyclerView()

songsEntryArray = MusicShareDatabase.Instance.Database.Table<SongsEntry>().ToArray(); 

mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview); 
mLayoutManager = new LinearLayoutManager(this.Activity); 
mRecyclerView.SetLayoutManager(mLayoutManager); 
mAdapter = new AllSongsAdapter(songsEntryArray); 
mAdapter.ItemClick += OnItemClick; 
mRecyclerView.SetAdapter(mAdapter); 
mAdapter.NotifyDataSetChanged(); 

而且這不起作用:

var query = MusicShareDatabase.Instance.DatabaseAsync.Table<SongsEntry>(); 

query.ToListAsync().ContinueWith(t => 
{ 
    mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview); 
    mLayoutManager = new LinearLayoutManager(this.Activity); 
    mRecyclerView.SetLayoutManager(mLayoutManager); 
    mAdapter = new AllSongsAdapter(t.Result.ToArray()); 
    mAdapter.ItemClick += OnItemClick; 
    mRecyclerView.SetAdapter(mAdapter); 
    mAdapter.NotifyDataSetChanged(); 
}); 

回答

1

我認爲ContinueWith(Action action)是在後臺線程上運行。

您需要使用方法Activity.RunOnUiThread(Action action);UIThread上運行此代碼。

代碼

query.ToListAsync().ContinueWith(t => 
{ 
    Activity.RunOnUiThread(() => { 
     mRecyclerView = rootView.FindViewById<RecyclerView>(Resource.Id.allsongs_recyclerview); 
     mLayoutManager = new LinearLayoutManager(this.Activity); 
     mRecyclerView.SetLayoutManager(mLayoutManager); 
     mAdapter = new AllSongsAdapter(t.Result.ToArray()); 
     mAdapter.ItemClick += OnItemClick; 
     mRecyclerView.SetAdapter(mAdapter); 
     mAdapter.NotifyDataSetChanged(); 
    }); 
});