启动多个地图活动

时间:2011-02-22 15:34:16

标签: android

您好我在不同的活动中实现两个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但它们也没有工作

1 个答案:

答案 0 :(得分:0)

  

我在不同的活动中实现两个mapview它们都有效,场景是有一个大的mapview包含一些投影点,因此当点击一个点时,它应该打开一个充满了一些细节的新活动。

我不推荐这个。将一个MapActivity与一个MapView一起使用,并将缩放/中心更改为点击该点的位置。覆盖onBackPressed(),如果您目前处于“详细模式”,请将缩放/中心更改为您之前的位置。这样,只需一个MapView即可完成所需的一切,这个问题就会消失。

  

所以我的第二个活动是一个scrollview布局,底部包含一个小的mapview,工作正常

请勿将MapView放入ScrollView