我的应用中有一个片段,里面有一个MapFragment。 当我加载这个片段时,我开始从服务器读取2000个标记数据,在阅读它们之后,我将遍历每个标记并将其添加到Map。 首先,地图需要4秒才能显示这2000个标记。但每次再次加载地图后(如更改方向或更改抽屉菜单项并再次返回地图),加载标记的次数越来越多。例如,在更改方向8次后,地图需要40秒才能加载相同的2000个标记!
这是我如何初始化地图:
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
CameraPosition cameraPosition = new CameraPosition.Builder().target( new LatLng(50.941303, 6.958166)).zoom(10).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getActivity().getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
在这里我将标记添加到地图中:
for (int i = 0; i<mapVehicles.size(); i++)
{
// latitude and longitude
double latitude = mapVehicles.get(i).latitude;
double longitude = mapVehicles.get(i).longitude;
// create marker
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude))
.title(mapVehicles.get(i).lineTripIdentification).snippet(destinationShort + ": " + mapVehicles.get(i).destination);
// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.vehicleannotation));
// adding marker
vehicleMarkers.put(googleMap.addMarker(marker), mapVehicles.get(i));
}
我还在具有MapFragment的片段的onCreateView中使用了以下内容:
this.setRetainInstance(true);
任何帮助将不胜感激:)
答案 0 :(得分:2)
不是一次又一次地删除和添加所有标记,而是应该通过setPosition(LatLng latlng)更改每个标记的位置。
答案 1 :(得分:0)
仅在未加载之前加载标记:
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
// do nothing
} else {
// add markers
}
}