Я бы посоветовал вам изменить список в вашей функции async
напрямую, а затем уведомить об изменениях в адаптере, вызвав:
RunOnUiThread(() => routesListView.Adapter.NotifyDataSetChanged());
Кстати, вы вызываете OnAppearing
как Task.Run(() => OnAppearing());
Так что это закончится как:
ListView routesListView;
List<Route> lstRoute = new List<Route>();
...
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate(Resource.Layout.SelectRoute, container, false);
routesListView = view.FindViewById<ListView>(Resource.Id.ListView);
routesListView.Adapter = new CustomListAdapter(lstRoute);
Task.Run(() => OnAppearing());
return view;
}
...
protected async Task OnAppearing()
{
SetupFiles setupFiles = new SetupFiles();
//PRPMaster prpMaster = new PRPMaster();
var prpDetails = await setupFiles.LoadTextAsync("PRPDetails.txt");
PRPMaster prpMaster = JsonConvert.DeserializeObject<PRPMaster>(prpDetails);
foreach (var item in prpMaster.PRPDetails)
{
lstRoute.Add(item.Route);
}
// This is necessary for the adapter to update its data
RunOnUiThread(() => routesListView.Adapter.NotifyDataSetChanged());
}
HIH