Я новичок в разработке MvvmCross, Xamarin и Android, и поэтому основой для моей разработки является модифицированная версия XPlatformMenus MvvmCross Sample ProjectКак загрузить (и получить доступ к настройке) GoogleMap в <fragment> в фрагменте макета, полученном из MvxFragment в MvvmCross
Возможно, я не могу успешно создать карту google для добавления простых позиционных маркеров (т. Е. Из-за отсутствия экспертной формулировки, получения доступа к экземпляру «GoogleMap», чтобы я мог добавить к нему экземпляры «MapMarker» и, возможно, настройте некоторые параметры карты, чтобы придать ей желаемое поведение).
Прежде чем пытаться получить доступ к карте Google и ввести метки, мой фрагмент фрагмента «fragment_asset_details» (или «Просмотр сведений об объекте в моем случае») успешно отобразил карту Google Android (полностраничный просмотр).
Ссылаясь на мои включенные фрагменты кода, вызов «FindFragmentById» возвращает значение «null» frag каждый раз. В отладке я вижу, что SupportFragment Manager знает о фрагментах макета, но фрагмент GoogleMap полностью отсутствует.
Некоторые общие (и непосредственно связанных с ними) являются следующие вопросы:
- Есть пример MvxFragment связанных GoogleMap «гнездования», что я пропустил?
- Должен ли я программно добавить фрагмент GoogleMap в контейнер фрагментов аналогично Getting a Reference to a GoogleMap in a fragment using Support Library v4?
- Я выбрал правильную точку в жизненном цикле фрагмента контейнера, чтобы успешно достичь желаемого результата?
Я буду рад добавить любые запрошенные детали, это сообщение (изначально) было ограничено теми элементами моего прототипа, которые, я думаю, скорее всего связаны с проблемой, с которой я сталкиваюсь.
пакеты, Config для моего приложения (чтобы указать, в частности, при условии версии MvvmCross):
<packages>
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid60" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid60" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="monoandroid60" />
<package id="modernhttpclient" version="2.4.2" targetFramework="monoandroid60" />
<package id="MvvmCross" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Binding" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Core" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Droid.FullFragging" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Droid.Shared" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Droid.Support.V4" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Droid.Support.V7.AppCompat" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Droid.Support.V7.RecyclerView" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Platform" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Plugin.Json" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Plugin.Messenger" version="4.2.3" targetFramework="monoandroid60" />
<package id="MvvmCross.Plugin.Visibility" version="4.2.3" targetFramework="monoandroid60" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.4.0.1" targetFramework="monoandroid60" />
<package id="Xamarin.GooglePlayServices.Base" version="29.0.0.2" targetFramework="monoandroid60" />
<package id="Xamarin.GooglePlayServices.Basement" version="29.0.0.2" targetFramework="monoandroid60" />
<package id="Xamarin.GooglePlayServices.Maps" version="29.0.0.2" targetFramework="monoandroid60" />
</packages>
Схема для "fragment_asset_details.axml" MvxFragment выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/toolbar_actionbar" />
<fragment
android:id="@+id/asset_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
Я определил фрагмент «AssetDetailsFragment» следующим образом:
using Android.App;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Android.OS;
using Android.Runtime;
using Android.Views;
using MyApp.Core.ViewModels.Base;
using MyApp.Core.ViewModels.Assets;
using MyApp.Droid.Utilities;
using MvvmCross.Droid.Shared.Attributes;
namespace MyApp.Droid.Fragments
{
[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame)]
[Register("myapp.droid.fragments.AssetDetailsFragment")]
public class AssetDetailsFragment : BaseFragment<AssetDetailsViewModel>
{
private Marker _assetMarker;
private GoogleMap _asset_map;
public bool SetUpGoogleMap(int resourceId)
{
if (null != _loco_map) return false;
if (FragmentManager != null)
{
var frag = (SupportMapFragment) base.Activity.SupportFragmentManager.FindFragmentById(resourceId);
var mapReadyCallback = new OnMapReadyClass();
mapReadyCallback.MapReadyAction += delegate (GoogleMap googleMap)
{
_asset_map = googleMap;
};
if (frag != null) frag.GetMapAsync(mapReadyCallback);
}
return true;
}
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
if (SetUpGoogleMap(Resource.Id.asset_map))
{
var viewModel = (AssetDetailsViewModel)ViewModel;
var options = new MarkerOptions();
options.SetPosition(new LatLng(viewModel.AssetDetails.latitude,
viewModel.AssetDetails.longitude));
options.SetTitle(viewModel.Asset.name);
_assetMarker = _asset_map.AddMarker(options);
}
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ShowHamburgerMenu = true;
var result = base.OnCreateView(inflater, container, savedInstanceState);
return result;
}
protected override int FragmentId => Resource.Layout.fragment_asset_details;
}
}