Hy,我想在我的Xamarin.Android应用程序中使用我的RecyclerView显示SQLite.net查询的结果。在执行查询同步时,everythin工作正常。但是当我将它异常时,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();
});
答案 0 :(得分:1)
我认为ContinueWith(Action action)
正在后台线程上运行。
您需要使用方法UIThread
在Activity.RunOnUiThread(Action action);
上运行此代码。
<强>代码强>
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();
});
});