以下代码在单一方向上工作正常,但一旦方向改变,就会导致异常:
using Android.App;
using Android.Content.PM;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Android.OS;
using Android.Support.V4.App;
using Cirrious.MvvmCross.Droid.Fragging;
using System;
using System.Collections.Generic;
using System.Drawing;
namespace Demo.Droid.Views
{
[Activity(Label = "View for MapViewModel", Theme = "@android:style/Theme.NoTitleBar", ConfigurationChanges = ConfigChanges.Orientation)]
public class MapView : MvxFragmentActivity
{
private SupportMapFragment _mapFragment;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.MapView);
InitMapFragment();
}
private void InitMapFragment()
{
_mapFragment = SupportFragmentManager.FindFragmentByTag("map") as SupportMapFragment;
if (_mapFragment == null)
{
GoogleMapOptions mapOptions = new GoogleMapOptions()
.InvokeMapType(GoogleMap.MapTypeNormal)
.InvokeZoomControlsEnabled(false)
.InvokeCompassEnabled(true);
FragmentTransaction fragTx = SupportFragmentManager.BeginTransaction();
_mapFragment = SupportMapFragment.NewInstance(mapOptions);
fragTx.Add(Resource.Id.map, _mapFragment, "map");
fragTx.Commit();
}
}
}
}
如果我在 OnCreate 中注释掉 InitMapFragment,则地图会正确加载并旋转,因此它似乎与 SupportMapFragment 有关。
布局文件包含:
<?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"
android:background="@android:color/white">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.1"
android:background="@drawable/nav_bar_background"
android:id="@+id/bartop">
</RelativeLayout>
<fragment
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.8"
android:id="@+id/map" />
<RelativeLayout
android:orientation="horizontal"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.1"
android:id="@+id/barbottom"
android:layout_alignParentBottom="true"
android:background="@drawable/nav_bar_background">
</RelativeLayout>
</LinearLayout>
调试输出只显示“发生未处理的异常”。但设备日志显示:
android.view.InflateException: Binary XML file line #1: Error inflating class fragment
(raw stack trace not found)
Caused by:
java.lang.IllegalStateException: Fragment com.google.android.gms.maps.SupportMapFragment did not create a view.