MvvmCross Android谷歌地图片段在另一片段

时间:2017-05-21 17:28:04

标签: google-maps android-fragments xamarin.android mvvmcross

参考2个样本" FragmentSample"和" N41 - Map",我试图将一个谷歌地图片段放在一个标签片段中但没有成功。

这是我实现地图片段的代码:

 public class MapTabFragment
: BaseRouteTabFragment
{
    private MarkerSet _Markers;
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container,
                                      Bundle savedInstanceState)
    {
        var ignored = base.OnCreateView(inflater, container, savedInstanceState);
        var binding = this.BindingInflate(Resource.Layout.tabs_map, null);

        var mapFragment = (SupportMapFragment) ChildFragmentManager.FindFragmentById(Resource.Id.map);
        _Markers = new MarkerSet(mapFragment.map);

        var set = this.CreateBindingSet<MapTabFragment, MapTabViewModel>();
        set.Bind(_Markers)
           .For(m => m.ItemsSource)
           .To(vm => vm.RouteMarkers);
        set.Apply();

        return binding;
    }

.....

和标签的axml:

<?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:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>

与示例比较时,我的代码的主要区别是继承自BaseRouteTabFragment(来自MvxFragment)的类,并使用ChildFragmentManager.FindFragmentById而不是SupportFragmentManager.FindFragmentById。有了这个改变,

  • &#34; mapFragment.map&#34;有编译错误 &#34;&#39; SupportMapFragment&#39;不包含&#39; map&#39;的定义和不 扩展方法&#39; map&#39;接受第一个类型的参数 &#39; SupportMapFragment&#39;可以找到&#34;。

检索地图的正确方法是什么,或者不可能将地图片段放在另一个片段中但仅限于活动?

在寻找解决方案时,我发现几年前有一个类似的问题 Android MapFragment as custom control in MvvmCross,得到斯图尔特的回答,那时候是不可能的。他提到可能还有其他一些方法可以处理,但没有被任何mvx贡献者触及。我想现在有任何解决方案。

我可以使用标签活动而不是标签片段轻松切换我的解决方案。但是,如果我的理解是正确的,我的解决方案将不再有机会使用汉堡包菜单。

任何帮助将不胜感激。

谢谢,

尼克

0 个答案:

没有答案