我有一个包含经度和纬度的数据对象。我从片段中的方法传递这些,该方法调用父活动方法以显示googlemap。

问题是,经度和纬度保持为(0,0)。我检查了对象是否正在设置并获取正确的数字。

在片段和对showmap的调用中,这些数字是正确的,但标记始终显示为默认值0,0。

我在活动xml中的框架布局中放置了地图,以更改可见性。 (我认为这是问题所在,这是一张空白地图)

我已经花了几个小时,现在手牵着手来到这里。

这是代码的相关部分:

我的片段代码:

/**
 * Get latitude and longitude from dataobject and pass into
 * showMap method of activity.
 */
public void showMap() {
     double lat = dataObject.getLatitude();
     double long_ = dataObject.getLongitude();
     String name = dataObject.getName();

    ((MyActivity) getActivity()).showMap(lat, long_, name);
}


我的活动代码:

public void showMap(double lat, double _long, String _title) {
    GoogleMap googleMap = ((MapFragment) getFragmentManager().
                findFragmentById(R.id.map)).getMap();
    googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    Marker marker = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(lat, _long)).title(_title));
    googleMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
}


我的活动xml:

<RelativeLayout
style="@style/RLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my">

 ....

<FrameLayout
    android:visibility="gone"
    ...
    <fragment
        android:id="@+id/map"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:name="com.google.android.gms.maps.MapFragment"/>


我认为我缺少一些必不可少的东西,但是我无法弄清楚它是什么。

添加日志:

GoogleMap googleMap = ((MapFragment) getFragmentManager().
                findFragmentById(R.id.map)).getMap();
//Log.
Log.d("1. act lat="+String.valueOf(lat),"act long="+String
                .valueOf(_long) );
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
//Log.
Log.d("2. act lat=" + String.valueOf(lat),
                "act long=" + String.valueOf(_long));
Marker marker = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(lat, _long)).title(_title));
//Log.
Log.d("3. act lat="+String.valueOf(lat),"act long="+String
                .valueOf(_long) );
googleMap.moveCamera(CameraUpdateFactory.zoomTo(5f));
//Log.
Log.d("4. act lat="+String.valueOf(lat),"act long="+String
                .valueOf(_long) );
FrameLayout frameLayout =
                (FrameLayout) findViewById(R.id.third);
Log.d("5. act lat="+String.valueOf(lat),"act " +
                "long="+String
                .valueOf(_long) );
frameLayout.setVisibility(View.VISIBLE);
Log.d("6. act lat=" + String.valueOf(lat),
                "act long=" + String.valueOf(_long));



  07-09 05:57:37.147 32317-32317 / thiscode.databasedemo D / 1。法案
  lat = -42.9:作用长= 147.3 07-09 05:57:37.157
  32317-32317 / thiscode.databasedemo D / 2。拉特行动= -42.9:拉长行动= 147.3
  07-09 05:57:37.167 32317-32317 / thiscode.databasedemo D / 3。法案
  lat = -42.9:行动时长= 147.3 07-09 05:57:37.167
  32317-32317 / thiscode.databasedemo D / 4。拉特行动= -42.9:拉长行动= 147.3
  07-09 05:57:37.167 32317-32317 / thiscode.databasedemo D / 5。法案
  lat = -42.9:行动时长= 147.3 07-09 05:57:37.167
  32317-32317 / thiscode.databasedemo D / 6。拉特行动= -42.9:拉长行动= 147.3

最佳答案

确认标记放置正确后,看来唯一的问题是正确对齐当前视图。

应该这样做:

        LatLng latlng = new LatLng(lat, _long);

        Marker marker = googleMap.addMarker(new MarkerOptions()
                .position(latlng).title(_title));

        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(latlng).zoom(5).build();

        googleMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));


您可能需要添加以下导入:

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.model.CameraPosition;

10-08 11:14