我试图在片段中加载谷歌地图。问题是,当我调用getMap对象时,对findFragmentById的调用总是返回null。我看过那里的每一个帖子,几乎尝试了所有这些帖子并且无法解决这个问题。
我的app结构是这样的: 1.我有一个扩展ActionBarActivity的Activity(MINMainActivity)。 2.在onCreate中,我打电话给以下人员:
mMainView = getLayoutInflater().inflate(R.layout.mimaster_drawer_layout, null);
mimaster_drawer_layout的来源是:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/init_background">
</FrameLayout>
<ListView
android:id="@+id/left_drawer"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/black"
android:dividerHeight="1dp"
android:background="@android:color/darker_gray"/>
我使用动态的片段列表切换FrameLayout(content_frame)的内容。其中一个片段包含一个SupportMapFragment。类定义是:
public class MINPageTypeMappingFragment extends Fragment
onCreateView代码是:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate view
//pageView = inflater.inflate(R.layout.page_mapping_fragment, container, false);
pageView = inflater.inflate(R.layout.page_mapping_fragment, container, false);
// Set up specific controls/views
SetupMapIfNeeded();
return pageView;
}
SetupMapIfNeeded的代码是:
private void setUpMapIfNeeded()
{
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null)
{
// Try to obtain the map from the SupportMapFragment.
SupportMapFragment mapfrag = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
if(mapfrag != null)
{
mMap = mapfrag.getMap();
}
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
page_mapping_fragment.xml是:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MINMainActivity" >
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
class="com.google.android.gms.maps.MapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
编辑:我知道该课程应该等于class =&#34; com.google.android.gms.maps.SupportMapFragment&#34;但是当我这样做时,它会在onCreateView的初始扩展期间崩溃。
我还包括清单文件的相关部分:
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
android:name="com.mobilityinitiative.ironman.MINApplication">
<!-- Mobility Initiative Activities -->
<activity android:name=".MINMainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:label="@string/title_minpagedefinition_list" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_key" />
</application>
就像我说的那样,悲伤的路线是:
// Try to obtain the map from the SupportMapFragment.
SupportMapFragment mapfrag = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
mapFrag始终为null。我是一个菜鸟的东西,所以请原谅我的无知。我还使用以下行获得了一个片段列表:
List<Fragment> frags = getActivity().getSupportFragmentManager().getFragments();
这没有像预期的那样回归。我在列表中有3个片段: 1)MINPageTypeMappingFragment 2)RetainFragment - 来自ImageCache的片段 - 不相关 3)MINPageTypeGridFragment - 用MINPageTypeMappingFragment替换的上一个片段
我没有看到&#34; SupportMapFragment&#34;像我期望的那样。
我能找到的大多数示例代码都需要从FragmentActivity加载SupportMapFragment。就我而言,包含GoogleMap的片段是从MINMainActivity加载的(基于按钮事件):
pageFragment = new MINPageTypeMappingFragment();
pageFragment.setArguments(arguments);
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
ft.replace(R.id.content_frame, pageFragment);
ft.commit();
HELP !!!!!
我知道该课程应该等于class =&#34; com.google.android.gms.maps.SupportMapFragment&#34;但是当我这样做时,它会在onCreateView的初始扩展过程中崩溃:pageView = inflater.inflate(R.layout.page_mapping_fragment,container,false);我得到的错误是:&#34; InflateException:二进制XML文件第7行:错误膨胀类片段。&#34;
答案 0 :(得分:1)
您正在使用标准地图片段类,因此如果您有FragmentManager而不是supportFragmentManager,请尝试此操作
private GoogleMap googleMap;
googleMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
答案 1 :(得分:0)
在尝试获取支持时,您正在使用标准的地图片段类。
将您的片段类替换为
class="com.google.android.gms.maps.SupportMapFragment"
答案 2 :(得分:0)
您在XMl文件中使用
class="com.google.android.gms.maps.MapFragment"
在java文件中使用了 SupportMapFragment support.v4库,这样就可以获得空指针异常。
您替换
中的代码miMaster_drawer_layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MINMainActivity" >
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
class="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>