我有一个包含经度和纬度的数据对象。我从片段中的方法传递这些,该方法调用父活动方法以显示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;