我有一个 MvxFragmentActivity 加载谷歌地图并在地图上放置标记。创建地图和标记的代码是非常特定于 Droid 的,因此它位于 Activity 中。标记是基于 ViewModel 中的对象创建的,每个对象都包含纬度/经度坐标。只要我在我的 Init 方法中加载对象,它就可以正常工作。此后,我将加载对象方法移至服务并在不同的线程上调用它。这样 UI 是响应式的。但是,加载完成后如何调用Activity中的方法呢?
这是我在 Activity 中的当前代码(此代码不应更改,只是它的调用方式):
private void InitMapFragment()
{
foreach (var item in viewModel.Items)
{
var icon = BitmapDescriptorFactory.FromResource(Resource.Drawable.place_img);
var markerOptions = new MarkerOptions()
.SetPosition(new LatLng(item.Latitude, item.Longitude))
.InvokeIcon(icon)
.SetSnippet(item.DistanceText)
.SetTitle(item.Name);
var marker = _map.AddMarker(markerOptions);
_markerIds.Add(marker.Id, item.Id);
}
}
我的视图模型中的代码:
private void BeginLoadItems()
{
_loadItemsService.Load();
}
// This is triggered by a message
private void OnLoadItemsComplete(LoadCompleteMessage message)
{
Items = message.Items;
}
我的服务中的代码:
public void Load()
{
ThreadPool.QueueUserWorkItem(state =>
{
var results = _repository.Retrieve();
_messenger.Publish(new LoadCompleteMessage(this, results));
});
}