Google マップを読み込み、マップ上にマーカーを配置する MvxFragmentActivity があります。マップとマーカーを作成するコードは Droid 固有のものであるため、Activity に含まれています。マーカーは、それぞれ緯度/経度座標を含む ViewModel 内のオブジェクトに基づいて作成されます。Init メソッドにオブジェクトをロードしている限り、これは問題なく機能しました。その後、load objects メソッドをサービスに移動し、別のスレッドで呼び出しました。このように、UI はレスポンシブです。ただし、ロードが完了したときにアクティビティでメソッドを呼び出すにはどうすればよいですか?
アクティビティ内の現在のコードは次のとおりです (このコードは、呼び出し方だけを変更する必要はありません)。
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));
});
}