参考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。有了这个改变,
检索地图的正确方法是什么,或者不可能将地图片段放在另一个片段中但仅限于活动?
在寻找解决方案时,我发现几年前有一个类似的问题 Android MapFragment as custom control in MvvmCross,得到斯图尔特的回答,那时候是不可能的。他提到可能还有其他一些方法可以处理,但没有被任何mvx贡献者触及。我想现在有任何解决方案。
我可以使用标签活动而不是标签片段轻松切换我的解决方案。但是,如果我的理解是正确的,我的解决方案将不再有机会使用汉堡包菜单。
任何帮助将不胜感激。
谢谢,
尼克