您好我在不同的活动中实现两个mapview它们都有效,场景是有一个大的mapview包含一些投影点,因此当点击一个点时,它应该打开一个充满了一些细节的新活动。所以我的第二个活动是一个scrollview布局,底部包含一个小的mapview,工作正常
问题:但是当我按下后退按钮并返回上一个mapview时,我会收到一些警告,并且mapview不再加载我得到了一半带有白色背景的地图屏幕
主要地图浏览:mapView show overlay details when clicked
所以当我点击气球如图所示时,它会打开一个新的活动,其中还包含一个mapview,所以当我按下后退按钮并返回主mapview(如上图所示)切成两半而我得到这些警告:
02-22 14:39:39.806: WARN/System.err(7823): java.lang.IllegalStateException: Connection pool shut down.
02-22 14:39:39.806: WARN/System.err(7823): at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:284)
02-22 14:39:39.806: WARN/System.err(7823): at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)
02-22 14:39:39.816: WARN/System.err(7823): at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:175)
02-22 14:39:39.816: WARN/System.err(7823): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:325)
02-22 14:39:39.816: WARN/System.err(7823): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-22 14:39:39.826: WARN/System.err(7823): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-22 14:39:39.826: WARN/System.err(7823): at com.google.common.io.android.AndroidHttpClient.execute(Unknown Source)
02-22 14:39:39.826: WARN/System.err(7823): at com.google.common.io.android.GoogleHttpClient.executeWithoutRewriting(Unknown Source)
02-22 14:39:39.836: WARN/System.err(7823): at com.google.common.io.android.GoogleHttpClient.execute(Unknown Source)
02-22 14:39:39.836: WARN/System.err(7823): at com.google.common.io.android.GoogleHttpClient.execute(Unknown Source)
02-22 14:39:39.836: WARN/System.err(7823): at com.google.common.io.android.AndroidHttpConnectionFactory$AndroidGoogleHttpConnection.getResponse(Unknown Source)
02-22 14:39:39.836: WARN/System.err(7823): at com.google.common.io.android.AndroidHttpConnectionFactory$AndroidGoogleHttpConnection.openDataInputStream(Unknown Source)
02-22 14:39:39.846: WARN/System.err(7823): at com.google.googlenav.datarequest.DataRequestDispatcher.serviceRequests(Unknown Source)
02-22 14:39:39.846: WARN/System.err(7823): at com.google.googlenav.datarequest.DataRequestDispatcher$DispatcherServer.run(Unknown Source)
02-22 14:39:39.846: WARN/System.err(7823): at java.lang.Thread.run(Thread.java:1102)
我发现有一篇帖子说它不可能在应用程序中实现两个地图视图,我在这里找到了一个解决方案,但没有奏效: How to use multiple MapActivities/MapViews per Android application/process
它表示在不同的过程中启动每个mapview如下:
<activity android:name=".activity.directory.MapView1" android:process=":MapView1">
<activity android:name=".activity.directory.MapView2" android:process=":MapView2">
上述解决方案对我没有用,我的代码如下:
MainMapView类
public class CouponMapView extends MapActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.large_mapview);
mapView = (MapView) findViewById(R.id.mapview);
// mapView.setBuiltInZoomControls(true);
mapView.setStreetView(false);
mapView.setTraffic(false);
// layout = findViewById(R.id.)
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.mappointer);
ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable, mapView, getParent());
OverlayItem overlayitem;
GeoPoint point = null;
double lat;
double lng;
try{
tempData = dataArray.gettempData();
for (int i = 0; i < this.totalLimit; i++) {
lat = Double.parseDouble(tempData.get(i).getLatitude());
lng = Double.parseDouble(tempData.get(i).getLongitude());
point = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6));
overlayitem = new OverlayItem(point, tempData.get(i).getId()+"", tempData.get(i).getInfo().getName());
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.setBalloonBottomOffset(10);
mapOverlays.add(itemizedoverlay);
}
}catch(Exception e){
}
try{
final MapController mc = mapView.getController();
mc.animateTo(point);
mc.setZoom(16);
}catch(Exception e){
}
}
protected boolean isRouteDisplayed() {
// TfODO Auto-generated method stub
return false;
}
}
IM调用此类的onTap方法来启动新活动
public class ItemizedOverlay extends BalloonItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> overlays = new ArrayList<OverlayItem>();
private Context context;
private Activity activity;
private int id;
public ItemizedOverlay(Drawable defaultMarker, MapView mapView, Activity activity) {
super(boundCenter(defaultMarker), mapView);
context = mapView.getContext();
this.activity = activity;
}
public void addOverlay(OverlayItem overlay) {
overlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return overlays.get(i);
}
@Override
public int size() {
return overlays.size();
}
@Override
protected boolean onBalloonTap(int index) {
Intent Details = new Intent(context, Tab.class);
Details.putExtra("Id", 1327);
context.startActivity(Details);
return true;
}
}
第三个类是包含另一个mapview实现的detail类,它是一个简单的linearlayout,但包含一个map。我不认为上面的代码有什么问题,但是我必须在第一堂课中缺少一些东西来刷新它的视图,虽然我已经尝试过view.requestlayout / view.invalidate但它们也没有工作
答案 0 :(得分:0)
我在不同的活动中实现两个mapview它们都有效,场景是有一个大的mapview包含一些投影点,因此当点击一个点时,它应该打开一个充满了一些细节的新活动。
我不推荐这个。将一个MapActivity
与一个MapView
一起使用,并将缩放/中心更改为点击该点的位置。覆盖onBackPressed()
,如果您目前处于“详细模式”,请将缩放/中心更改为您之前的位置。这样,只需一个MapView
即可完成所需的一切,这个问题就会消失。
所以我的第二个活动是一个scrollview布局,底部包含一个小的mapview,工作正常
请勿将MapView
放入ScrollView
。