Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序正在破坏标签和谷歌地图_Android_Google Maps_Android Fragments_Tabs - Fatal编程技术网

Android应用程序正在破坏标签和谷歌地图

Android应用程序正在破坏标签和谷歌地图,android,google-maps,android-fragments,tabs,Android,Google Maps,Android Fragments,Tabs,我使用的是ActionBar标签,有三个标签,第三个标签有谷歌地图。 当我在第1次和第3次之间切换时,它会崩溃,在第1次和第2次之间它也会崩溃,但在第2次和第3次切换之间从不崩溃。我不知道为什么会这样 main活动的代码 package com.example.prototype; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener;

我使用的是ActionBar标签,有三个标签,第三个标签有谷歌地图。 当我在第1次和第3次之间切换时,它会崩溃,在第1次和第2次之间它也会崩溃,但在第2次和第3次切换之间从不崩溃。我不知道为什么会这样

main活动的代码

package com.example.prototype;


import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.support.v4.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements ActionBar.TabListener  {
    TabsPagerAdapter tabpager;
    ViewPager pager;
    DrawerLayout drawerLayout;      
    ActionBar action_bar;
    ListView navigation_list;
    @SuppressWarnings("deprecation")
    ActionBarDrawerToggle drawerToggle;
    String items[];
    String tabs_list[]={"Best Offers","Categories","Near By Places"};

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawer_layout);
        initComponents();
        action_bar=getActionBar();
        setNavigationList();
        setTabs();
    }

    @SuppressWarnings("deprecation")
    private void setTabs() {

        action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (String tab_name : tabs_list) {
            action_bar.addTab(action_bar.newTab().setText(tab_name)
                    .setTabListener(this));
        }
        pager.setAdapter(tabpager);
        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                action_bar.setSelectedNavigationItem(arg0);;
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }

    @SuppressWarnings("deprecation")
    private void setNavigationList() {

        int open=R.string.navigation_open;
        int close=R.string.navigation_close;
        navigation_list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));

        drawerToggle=new ActionBarDrawerToggle(this,drawerLayout, R.drawable.ic_menu_white_18dp,open,close){


            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                action_bar.show();
            }

            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                action_bar.hide();

            }
        };

        drawerLayout.setDrawerListener(drawerToggle);

        action_bar.setDisplayHomeAsUpEnabled(true);
        action_bar.setHomeButtonEnabled(true);

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onPostCreate(savedInstanceState);
        drawerToggle.syncState();
    }


    private void initComponents() {
        // TODO Auto-generated method stub

        drawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
        action_bar=getActionBar();
        navigation_list=(ListView) findViewById(R.id.left_drawer);
        items=getResources().getStringArray(R.array.navigation_drawer);
        pager=(ViewPager) findViewById(R.id.pager);    
        FragmentManager m=getSupportFragmentManager();
        tabpager=new TabsPagerAdapter(m);

    }

    @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;
        }

        if (id == R.id.search_menu) {
            Toast.makeText(getApplicationContext(), "Searched Clicked ", Toast.LENGTH_LONG).show();
            return true;
        }

        if (id == R.id.share_menu) {
            Toast.makeText(getApplicationContext(), "Share Clicked ", Toast.LENGTH_LONG).show();
            return true;
        }

        if (id == R.id.navigation_menu) {
            Toast.makeText(getApplicationContext(), "Navigation Clicked ", Toast.LENGTH_LONG).show();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        pager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

}
表2 java代码:

public class BestOfferFragment extends Fragment{

    View rootView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.bestoffer, container, false);

    }
}
public class CategoriesrFragment extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.categories, container, false);

        return rootView;
    }
}
package com.example.prototype.tabs;

import java.util.Timer;

import com.example.prototype.MainActivity;
import com.example.prototype.R;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

public class NearByPlacesFragment extends Fragment  implements OnMapReadyCallback, LocationListener {
    static int i=0;
    GoogleMap gmap;
    Marker mp;
    LatLng ll;
    Location l;
    Context ctx;
    double lat,lon;
    boolean isGpsEnabled,isNetworkAvailable,isLocationSet;
    LocationManager lmgr;
    long minTime = 1000;
    long minDistance = 1;
    Location loc;
    SupportMapFragment mapFragment;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        ctx=getActivity();
        super.onCreateView(inflater, container, savedInstanceState);
        if(mapFragment!=null){ Toast.makeText(getActivity(), "fragment exist`", 1000).show();}
        View rootView = inflater.inflate(R.layout.nearbyplaces, container, false);
        loc=getLocation();
        if(gmap==null)
            setMap();
        Toast.makeText(getActivity(), "created`", 1000).show();   
        return rootView;

    }


    private void setMap() {
        // TODO Auto-generated method stub
     mapFragment = (SupportMapFragment) getChildFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }


    private void setMarker() {
        // TODO Auto-generated method stub
        if(gmap!=null){
        lat=loc.getLatitude();
        lon=loc.getLongitude();
        ll=new LatLng(lat, lon);
        Toast.makeText(getActivity(), "lat"+lat, Toast.LENGTH_LONG).show();
        mp=gmap.addMarker(new MarkerOptions().position(ll).title("Your Location"));
        CameraUpdate center=CameraUpdateFactory.newLatLng(new LatLng(lat,lon));
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);
        gmap.moveCamera(center);
        gmap.animateCamera(zoom);
        }
    }




    @Override
    public void onMapReady(GoogleMap map) {
        // TODO Auto-generated method stub

            map.getUiSettings().setAllGesturesEnabled(true);
            map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            map.setMyLocationEnabled(true);
            gmap=map;
        setMarker();
    }



    public Location getLocation(){

        lmgr=(LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);

        isGpsEnabled=lmgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
        isNetworkAvailable=lmgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if(isGpsEnabled==true){
            setLocationManager("gps");
        }
        else if(isNetworkAvailable==true){
            setLocationManager("network");
        }

        return loc;

    }


    private boolean setLocationManager(String s){

        if(s.equals("gps")){
            Toast.makeText(getActivity(), "gps", Toast.LENGTH_LONG).show();
            lmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, this);
            loc=lmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);        
        }

        else{
            lmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minDistance, this);
            loc=lmgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }

        return isLocationSet;
    }



    @Override
    public void onLocationChanged(Location location) {

    }



    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

}
表3 java代码:

public class BestOfferFragment extends Fragment{

    View rootView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.bestoffer, container, false);

    }
}
public class CategoriesrFragment extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.categories, container, false);

        return rootView;
    }
}
package com.example.prototype.tabs;

import java.util.Timer;

import com.example.prototype.MainActivity;
import com.example.prototype.R;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

public class NearByPlacesFragment extends Fragment  implements OnMapReadyCallback, LocationListener {
    static int i=0;
    GoogleMap gmap;
    Marker mp;
    LatLng ll;
    Location l;
    Context ctx;
    double lat,lon;
    boolean isGpsEnabled,isNetworkAvailable,isLocationSet;
    LocationManager lmgr;
    long minTime = 1000;
    long minDistance = 1;
    Location loc;
    SupportMapFragment mapFragment;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        ctx=getActivity();
        super.onCreateView(inflater, container, savedInstanceState);
        if(mapFragment!=null){ Toast.makeText(getActivity(), "fragment exist`", 1000).show();}
        View rootView = inflater.inflate(R.layout.nearbyplaces, container, false);
        loc=getLocation();
        if(gmap==null)
            setMap();
        Toast.makeText(getActivity(), "created`", 1000).show();   
        return rootView;

    }


    private void setMap() {
        // TODO Auto-generated method stub
     mapFragment = (SupportMapFragment) getChildFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }


    private void setMarker() {
        // TODO Auto-generated method stub
        if(gmap!=null){
        lat=loc.getLatitude();
        lon=loc.getLongitude();
        ll=new LatLng(lat, lon);
        Toast.makeText(getActivity(), "lat"+lat, Toast.LENGTH_LONG).show();
        mp=gmap.addMarker(new MarkerOptions().position(ll).title("Your Location"));
        CameraUpdate center=CameraUpdateFactory.newLatLng(new LatLng(lat,lon));
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);
        gmap.moveCamera(center);
        gmap.animateCamera(zoom);
        }
    }




    @Override
    public void onMapReady(GoogleMap map) {
        // TODO Auto-generated method stub

            map.getUiSettings().setAllGesturesEnabled(true);
            map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            map.setMyLocationEnabled(true);
            gmap=map;
        setMarker();
    }



    public Location getLocation(){

        lmgr=(LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);

        isGpsEnabled=lmgr.isProviderEnabled(LocationManager.GPS_PROVIDER);
        isNetworkAvailable=lmgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if(isGpsEnabled==true){
            setLocationManager("gps");
        }
        else if(isNetworkAvailable==true){
            setLocationManager("network");
        }

        return loc;

    }


    private boolean setLocationManager(String s){

        if(s.equals("gps")){
            Toast.makeText(getActivity(), "gps", Toast.LENGTH_LONG).show();
            lmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, this);
            loc=lmgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);        
        }

        else{
            lmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minDistance, this);
            loc=lmgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }

        return isLocationSet;
    }



    @Override
    public void onLocationChanged(Location location) {

    }



    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

}
表3 xml:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:id="@+id/nearbyplace"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <fragment android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"

    android:name="com.google.android.gms.maps.SupportMapFragment" />

</RelativeLayout>
以下是日志:

07-11 01:49:28.877:E/NativeCrypto(7463):ssl=0x616b4438证书验证回调x509存储ctx=0x6210aab0 arg=0x0
07-11 01:49:28.882:E/NativeCrypto(7463):ssl=0x616b4438证书验证回调调用verifyCertificateChain authMethod=ECDHE\U ECDSA
07-11 01:49:35.046:E/AndroidRuntime(7463):致命异常:主
07-11 01:49:35.046:E/AndroidRuntime(7463):android.view.InflateException:二进制XML文件行#8:膨胀类片段时出错
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater.inflate(LayoutInflater.java:489)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-11 01:49:35.046:E/AndroidRuntime(7463):位于com.example.prototype.tabs.NearByPlacesFragment.onCreateView(NearByPlacesFragment.java:58)
07-11 01:49:35.046:E/AndroidRuntime(7463):位于android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1314)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:730)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:490)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.view.ViewPager.populate(ViewPager.java:1105)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.view.ViewPager.populate(ViewPager.java:951)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.view.ViewPager$3.run(ViewPager.java:250)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.Choreographer.doCallbacks(Choreographer.java:579)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.Choreographer.doFrame(Choreographer.java:547)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.os.Handler.handleCallback(Handler.java:725)上
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.os.Handler.dispatchMessage(Handler.java:92)上
07-11 01:49:35.046:E/AndroidRuntime(7463):位于android.os.Looper.loop(Looper.java:153)
07-11 01:49:35.046:E/AndroidRuntime(7463):位于android.app.ActivityThread.main(ActivityThread.java:5297)
07-11 01:49:35.046:E/AndroidRuntime(7463):位于java.lang.reflect.Method.Invokenactive(本机方法)
07-11 01:49:35.046:E/AndroidRuntime(7463):位于java.lang.reflect.Method.invoke(Method.java:511)
07-11 01:49:35.046:E/AndroidRuntime(7463):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-11 01:49:35.046:E/AndroidRuntime(7463):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-11 01:49:35.046:E/AndroidRuntime(7463):在dalvik.system.NativeStart.main(本机方法)
07-11 01:49:35.046:E/AndroidRuntime(7463):由以下原因引起:java.lang.IllegalArgumentException:二进制XML文件行#8:重复id 0x7f08006c、标记null或父id 0x7f08006b,以及com.google.android.gms.maps.SupportMapFragment的另一个片段
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2175)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater$FactoryMerge.onCreateView(LayoutInflater.java:168)
07-11 01:49:35.046:E/AndroidRuntime(7463):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:675)
2007-11 01:49:35.046:E/AndroidRuntime(7463):。。。还有27个

运行时异常的原因:当启动应用程序时,它会初始化所有选项卡,然后再次滑动到选项卡3,即映射选项卡,代码试图创建另一个尚未销毁的映射片段,这会导致非法状态异常,有两种解决方案:

解决方案1:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
              ctx=getActivity();

              if (view != null) {
                    ViewGroup parent = (ViewGroup) view.getParent();
                    if (parent != null)
                        parent.removeView(view);
                }
                try {
                    view = inflater.inflate(R.layout.nearbyplaces, container, false);
                } catch (InflateException e) {

                }

//rest of code is same      
}
在本文中,我们首先替换现有片段,从父级中删除它,然后再次添加

解决方案2:这是最好的解决方案:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
          ctx=getActivity();

          if (view == null) {
    view = inflater.inflate(R.layout.nearbyplaces, container, false);
            }
//rest of code is same
            return view;


    }

确保不会遇到此错误的最佳方法是使片段扩展
SupportMapFragment
,而不是在片段中嵌套一个片段

我刚刚使用了一个
ViewPager
和一个
FragmentPagerAdapter
并将地图作为一个选项卡来完成这项工作

以下是一般结构,注意不需要重写
onCreateView()
方法,也不需要膨胀任何布局xml:

public class MyMapFragment extends SupportMapFragment implements OnMapReadyCallback {

    private GoogleMap mMap;
    private Marker marker;


    public MyMapFragment() {
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d("MyMap", "onResume");
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {

        if (mMap == null) {

            Log.d("MyMap", "setUpMapIfNeeded");

            getMapAsync(this);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        Log.d("MyMap", "onMapReady");
        mMap = googleMap;
        setUpMap();
    }

    private void setUpMap() {

        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mMap.getUiSettings().setMapToolbarEnabled(false);


        mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

            @Override
            public void onMapClick(LatLng point) {

                Log.d("MyMap", "MapClick");

                //remove previously placed Marker
                if (marker != null) {
                    marker.remove();
                }

                //place marker where user just clicked
                marker = mMap.addMarker(new MarkerOptions().position(point).title("Marker")
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)));

                Log.d("MyMap", "MapClick After Add Marker");

            }
        });

    }


}
结果:

I ha