经度和纬度的双值不会传递给googlemap Marker

时间:2015-07-08 19:42:03

标签: android google-maps android-fragments

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

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

图片在片段和showmap调用中是正确的,但标记仍然显示为默认的0,0。

我在我的活动xml中有一个maplayout中的地图,我改变了可见性。 (我认为这是问题,它是一张空白的地图)

我已经花了好几个小时,现在已经来到这里,手头上。

这是代码的相关部分:

我的片段代码:

/**
 * 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:act long = 147.3 07-09 05:57:37.157   32317-32317 / thiscode.databasedemo D / 2。 act lat = -42.9:act long = 147.3   07-09 05:57:37.167 32317-32317 / thiscode.databasedemo D / 3。法案   lat = -42.9:act long = 147.3 07-09 05:57:37.167   32317-32317 / thiscode.databasedemo D / 4。 act lat = -42.9:act long = 147.3   07-09 05:57:37.167 32317-32317 / thiscode.databasedemo D / 5。法案   lat = -42.9:act long = 147.3 07-09 05:57:37.167   32317-32317 / thiscode.databasedemo D / 6。 act lat = -42.9:act long = 147.3

1 个答案:

答案 0 :(得分:1)

在确认标记正确放置后,看起来唯一的问题是让当前视图正确排列。

这应该这样做:

        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;