【问题标题】:Add Marker to Google Map in SupportFragment在 SupportFragment 中将标记添加到 Google 地图
【发布时间】:2018-06-17 23:19:00
【问题描述】:

我为tabs 做了一个tabbed-activity。在第四个tab 我做了一个map,我添加了一个markermarker 不可见,我不明白为什么。我为我的问题尝试了很多解决方案,但现在我遇到了这种情况。

这是我的Java 代码:

public class tab_mappa extends SupportMapFragment implements OnMapReadyCallback {

    private GoogleMap googleMap;
    SupportMapFragment mSupportMapFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        super.onCreateView(inflater, container, savedInstanceState);
        View root = inflater.inflate(R.layout.tabmappa, null, false);
        mSupportMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
        if (mSupportMapFragment == null) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            mSupportMapFragment = SupportMapFragment.newInstance();
            fragmentTransaction.replace(R.id.map, mSupportMapFragment).commit();
        }

        return root;
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {
        this.googleMap = googleMap;
        this.googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

        this.googleMap.getUiSettings().setZoomControlsEnabled(true);
        this.googleMap.getUiSettings().setCompassEnabled(true);
        this.googleMap.getUiSettings().setMyLocationButtonEnabled(true);
        this.googleMap.getUiSettings().setZoomGesturesEnabled(true);
        this.googleMap.getUiSettings().setRotateGesturesEnabled(true);

        LatLng pos1 = new LatLng(44.783878,10.879663);
        final LatLngBounds.Builder builder = new LatLngBounds.Builder();
        builder.include(pos1);

        this.googleMap.addMarker(new MarkerOptions().position(pos1));
        this.googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));
            }
        });

    }

    @Override
    public void onPause() {
        super.onPause();
    }

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

    private void setUpMapIfNeeded() {
        if (googleMap == null) {
            getMapAsync(this);
        }
    }
    }

这是我的xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center"
android:orientation="vertical"
tools:context="esame.progetto.xhondar.github.com.info.tab_mappa">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1.03"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map" />

</LinearLayout>

这是我的最终结果:

你有什么想法吗?

【问题讨论】:

    标签: android google-maps fragment android-tabbed-activity


    【解决方案1】:

    我解决了问题,这是给需要的人的解决方案:

    Java代码:

    import android.support.v4.app.Fragment;
    public class tab_mappa extends Fragment implements OnMapReadyCallback {
            GoogleMap map;
            SupportMapFragment mapFragment;
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                View v = inflater.inflate(R.layout.tabmappa, container, false);
                SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map);
                mapFragment.getMapAsync(this);
    
                return v;
            }
    
            @Override
            public void onMapReady(GoogleMap googleMap){
                map = googleMap;
                this.map = googleMap;
                this.map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    
                this.map.getUiSettings().setZoomControlsEnabled(true);
                this.map.getUiSettings().setCompassEnabled(true);
                this.map.getUiSettings().setMyLocationButtonEnabled(true);
                this.map.getUiSettings().setZoomGesturesEnabled(true);
                this.map.getUiSettings().setRotateGesturesEnabled(true);
    
                LatLng pp = new LatLng(44.783878,10.879663);
                map.addMarker(new MarkerOptions().position(pp).title("Carpi"));
                map.animateCamera(CameraUpdateFactory.newLatLngZoom(pp, 8));
            }
        }
    

    Xml代码:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="esame.progetto.xhondar.github.com.info.tab"/>
    

    错误位于xml代码中:是Fragment而不是FrameLayout,这个东西导致代码内部冲突。

    【讨论】:

      【解决方案2】:

      在没有构建器的情况下使用标记怎么样?你写的代码在onMapReady()

      LatLng pos1 = new LatLng(44.783878,10.879663);
      final LatLngBounds.Builder builder = new LatLngBounds.Builder();
      builder.include(pos1);
      
      this.googleMap.addMarker(new MarkerOptions().position(pos1));
      this.googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
           @Override
           public void onMapLoaded() {
                  googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));
           }
      });
      

      变成了

      LatLng pos1 = new LatLng(44.783878,10.879663);
      
      googleMap.addMarker(new MarkerOptions().position(pos1));
      this.googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
           @Override
           public void onMapLoaded() {
                  googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));
           }
      });
      

      这个。我在 googleMap 之前删除了 builder 和 this

      【讨论】:

      • @KKKKK 哈哈,我忘了。那么在googleMap之前删除它怎么样? this.googleMap 在您的实例中表示 googleMap,但 googleMap 在您的方法中表示地图。
      • @KKKKK 好吧.. 那么如何使用日志 Like Log("a", "a");在你的 onMapReady 中?使用日志“a”和“b”,您可以搜索首先运行的代码。如果并检查此代码是否运行,请使用登录或同时使用 onMapReady 和 onCreateView。
      • 是指 LogCat?我不知道如何使用它:-(
      • @KKKKK 只需使用 Log.e("Hello", "Bye");在您的代码中。然后你就可以了解如何使用 LogCat 了。您可以在运行选项卡中确认登录。不是 LogCat 选项卡。
      • onCreateView 先运行
      猜你喜欢
      • 2018-10-21
      • 2020-07-30
      • 2013-03-25
      • 2018-02-25
      • 2018-08-13
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多