我有一个包含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
答案 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;