【问题标题】:Android fatal error on referencing GoogleMap Fragment using FragmentManager使用 FragmentManager 引用 GoogleMap 片段时出现 Android 致命错误
【发布时间】:2014-10-31 12:13:39
【问题描述】:

我能够使用以下 Activity 布局成功地初始化 GoogleMap API 2.0:

<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/fragment_container">

    <fragment
        android:id="@+id/ganbi_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment" />

</FrameLayout>

</RelativeLayout>

现在我正在尝试引用此片段以使用以下代码设置几个选项:

    private GoogleMap gMap;
.
.
.

    private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.
    if (gMap == null) {
        gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.ganbi_map)).getMap();
        // Check if we were successful in obtaining the map.
        if (gMap != null) {
            // The Map is verified. It is now safe to manipulate the map.
            // Load map preferences
            Log.d("Info","Map ready for initailization");

        }
    }
}

这会导致致命错误,并且跟踪归咎于以下行:gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.ganbi_map)).getMap();

有什么建议吗?

【问题讨论】:

    标签: android google-maps android-fragments google-maps-android-api-2


    【解决方案1】:

    试试这个

     gMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.ganbi_map)).getMap();
    

    【讨论】:

      【解决方案2】:

      替换下面的行:

      gMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.ganbi_map)).getMap();
      

      到这一行:

       gMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.ganbi_map)).getMap();
      

      【讨论】:

        【解决方案3】:

        Java 代码

        package com.dilip.googlemapsv2;
        
        import com.google.android.gms.common.GooglePlayServicesUtil;
        import com.google.android.gms.maps.GoogleMap;
        import com.google.android.gms.maps.MapFragment;
        
        import android.os.Bundle;
        import android.support.v4.app.FragmentActivity;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.widget.Toast;
        
        public class MainActivity extends FragmentActivity {
        
            // Google Map
            private GoogleMap googleMap;
        
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                try {
                    // Loading map
                    initilizeMap();
        
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        
        
        
            /**
            * function to load map. If map is not created it will create it for you
            * */
           private void initilizeMap() {
               if (googleMap == null) {
                   //googleMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
                   googleMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
        
                   // check if map is created successfully or not
                   if (googleMap == null) {
                       Toast.makeText(getApplicationContext(),"Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
                   }
               }
           }
        
           @Override
           public void onResume() {
               super.onResume();
               GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getApplicationContext());
               initilizeMap();
           }
        
            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
            }
        
            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                // Handle action bar item clicks here. The action bar will
                // automatically handle clicks on the Home/Up button, so long
                // as you specify a parent activity in AndroidManifest.xml.
                int id = item.getItemId();
                if (id == R.id.action_settings) {
                    return true;
                }
                return super.onOptionsItemSelected(item);
            }
        }
        

        XML 代码

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        
        
            <fragment
                android:id="@+id/map"
        
                android:name="com.google.android.gms.maps.MapFragment"      
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        
        
        
        </RelativeLayout>
        

        Mainfest 文件

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.dilip.googlemapsv2"
            android:versionCode="1"
            android:versionName="1.0" >
            <permission
                android:name="com.dilip.googlemapsv2.permission.MAPS_RECEIVE"
                android:protectionLevel="signature" />
        
            <uses-sdk
                android:minSdkVersion="14"
                android:targetSdkVersion="20" />
            <uses-permission android:name="com.dilip.googlemapsv2.permission.MAPS_RECEIVE" />
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
            <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
        
        
        
                    <uses-feature android:glEsVersion="0x00020000"
                         android:required="true"/>
        
        
        
            <application
                android:allowBackup="true"
                android:icon="@drawable/ic_launcher"
                android:label="@string/app_name"
                android:theme="@style/AppTheme" >
                <activity
                    android:name=".MainActivity"
                    android:label="@string/app_name" >
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
        
                        <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
                </activity>
        
                <!-- Goolge API Key -->
                <meta-data
                    android:name="com.google.android.maps.v2.API_KEY"
                    android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxx" />                /* Added Bi Dilip */ 
                <meta-data 
                    android:name="com.google.android.gms.version" 
                    android:value="@integer/google_play_services_version" />
            </application>
        
        </manifest>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          相关资源
          最近更新 更多