在 ToListAsync() 之后显示 RecyclerView

Display RecyclerView after ToListAsync()

嗨,我想在我的 Xamarin.Android 应用程序中显示使用 RecyclerView 的 SQLite.net 查询的结果。当执行查询同步时,一切正常。但是当我异步执行它时,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();
});

我认为 ContinueWith(Action action) 在后台线程上 运行ning。

您需要使用方法 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();
    });
});