我正在做一个Xamarin Android项目,我不想将我的SQLite数据库中的对象列表显示到RecyclerView中。
RecyclerView是一个片段。当我打开这个片段时,我不想显示列表,当我从一个Activity返回到这个片段时,我不想刷新回收器视图的数据。
知道我得到了正确的值,但我不知道为什么不等待GetMyObjectsAsync
结果为什么?
using System.Collections.Generic;
using System.Threading.Tasks;
using Android.OS;
using Android.Support.V7.Widget;
using Android.Views;
using Microsoft.Practices.ServiceLocation;
using System.Linq;
using Android.App;
using Android.Widget;
using Android.Util;
using System;
namespace POCProject.Droid.Fragments
{
public class MyCustomFragment : Fragment
{
private IMyObjectsService _myObjectsService;
List<ObjModel> myObjects { get; set; } = new List<ObjModel>();
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
MyObjectsRecyclerViewAdapter mAdapter;
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
_myObjectsService = ServiceLocator.Current.GetInstance<IMyObjectsService>();
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.fragment_my_objects_list, container, false) as View;
mRecyclerView = view.FindViewById<RecyclerView>(Resource.Id.MyRecyclerView);
mLayoutManager = new LinearLayoutManager(mRecyclerView.Context);
mRecyclerView.SetLayoutManager(mLayoutManager);
return view;
}
public override void OnResume()
{
base.OnResume();
Task.Run(async () => {
try
{
myObjects = await GetMyObjectsAsync(); // Here it's not awaited the result why ?
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
Console.WriteLine("--------------------OnResume Called-------------------- " + myObjects.Count()); // Always 0 why ?
mRecyclerView.SetAdapter(mAdapter);
}
private async Task<List<ObjModel>> GetMyObjectsAsync(){
Console.WriteLine("--------------------GetMyObjectsAsync Called--------------------");
var result = await _myObjectsService.GetAllAsync(); // Get objects in sqlite databases
Console.WriteLine("-------------------- result" + result.Value.Count() + "--------------------"); // Return the correct value for example 5
List<ObjModel> myOjectsTmp = new List<ObjModel>();
if (!result.HasErrors && result.HasValue)
{
foreach (var obj in result.Value)
{
myOjectsTmp.Add(obj);
}
Console.WriteLine("-------------------- myOjectsTmp"+ myOjectsTmp.Count() + "--------------------"); // Return the correct value for example 5
}
return myOjectsTmp;
}
}
}
答案 0 :(得分:1)
试试这个:
移动这两行:
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
mRecyclerView.SetAdapter(mAdapter);
之后
myObjects = await GetMyObjectsAsync();
像:
myObjects = await GetMyObjectsAsync();
Activity.RunOnUiThread(() =>
{
mAdapter = new MyObjectsRecyclerViewAdapter(myObjects);
mRecyclerView.SetAdapter(mAdapter);
});