Несколько карт (с пролистыванием) в MapActivity в Android

У меня есть список адресов на экране № 1. При нажатии любого элемента осуществляется переход к следующему экрану, который показывает карту выбранного адреса. Теперь я хочу провести пальцем по экрану, чтобы просмотреть карту следующего адреса. Вот мой код..

Это мой map_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/linearLayoutTopBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/scarlet"
    android:gravity="center_vertical|center_horizontal" >

    <TextView
        android:id="@+id/textViewTopBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:text="Map"
        android:textColor="@color/white"
        android:textSize="20dp" />
</LinearLayout>

<com.xxx.android.yyyy.activities.HorizontalPager
    android:id="@+id/horizontal_pager"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</com.xxx.android.yyyy.activities.HorizontalPager>

<ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_margin="10dp"
    android:background="@null"
    android:scaleType="fitCenter"
    android:src="@drawable/button123" />

This is my map.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
     <com.google.android.maps.MapView
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/mapview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:apiKey="xxxxxxxxxxxxxxxxxxxxx"
                android:clickable="true" /> 
 </LinearLayout>

Activity :

public class MyMapActivity extends MapActivity
 {
private MapView mapView;
private Drawable mapMarker;
private MyLocationOverlay myMap;
private MapController mapController;
private List<Overlay> overlayList;
private HorizontalPager hPager;

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_screen);
    hPager = (HorizontalPager) findViewById(R.id.horizontal_pager);
    View inflatedView;
    for (int i = 0; i < listViewSize; i++) //// getting listviewSize from intent extras 
    {    
     inflatedView = (View) View.inflate(MyMapActivity.this, R.layout.map, null);
     mapView = (MapView) inflatedView.findViewById(R.id.mapview);  
     showMap(latt, longt);  //getting all the latt, longt values of addresses from previous activity 
     hPager.addView(inflatedView);
    }
    hPager.setCurrentScreen(selectedAddressIndexInListView, false); //<<---- intent extras
  }

  void showMap(double latitude , double longitude )
  {
    mapView.setBuiltInZoomControls(true);
    mapMarker = getResources().getDrawable(R.drawable.map_marker);

    overlayList = mapView.getOverlays(); 
    myMap = new MyLocationOverlay(this, mapView);
    myMap.enableMyLocation();
    mapController = mapView.getController();

    GeoPoint geoPoint = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));
    mapController.animateTo(geoPoint);
    mapController.setZoom(12);

    OverlayItem overlayItem = new OverlayItem(geoPoint,"xxx", "yyy");
    CustomPinpoint customPinpoint = new CustomPinpoint(mapMarker,MyMapActivity.this);
    customPinpoint.insertPinpoint(overlayItem);
    overlayList.clear();
    overlayList.add(myMap);
    overlayList.add(customPinpoint); 
   }
@Override
protected void onResume() {
    super.onResume();
    myMap.enableCompass();
    myMap.enableMyLocation();
}

@Override
protected void onPause() {
    super.onPause();
    myMap.disableCompass();
    myMap.disableMyLocation();
} 

 @Override
protected boolean isRouteDisplayed() {
    return false;   
} 
 }

{ Ссылка: https://github.com/ysamlan/horizontalpager/tree/master/src/com/github/ysamlan/horizontalpager }

Приложение немедленно принудительно закрывается при нажатии любого элемента списка.

Caused by: java.lang.IllegalStateException: You are only allowed to have a single MapView in a MapActivity

Где я ошибаюсь? Все работает нормально в следующих двух случаях. 1. Если я повторяю цикл for только один раз. 2. если я удалю строки, связанные с представлением карты, из xml, файлов активности.

Как я могу иметь несколько карт в одной MapActivity с помощью смахивания?. Помогите мне, пожалуйста


person Santhosh    schedule 11.09.2012    source источник


Ответы (2)


У вас может быть только одно представление карты для каждого действия карты, однако вы можете иметь несколько действий карты в одном приложении, что в вашем случае будет не очень идеальным решением.

Что вы должны сделать вместо того, чтобы иметь совершенно новое представление карты для адреса, вы могли бы иметь другой набор наложений для них. Таким образом, вам нужно будет изменить набор наложений только тогда, когда вы хотите просмотреть детали карты для другого адреса. Помимо того, что это можно сделать с Android, это гораздо более оптимально, чем иметь несколько просмотров карты.

person Urban    schedule 11.09.2012
comment
Не могли бы вы рассказать мне, как я могу иметь другой набор оверлеев для карт? пожалуйста, дайте код/ссылку. - person Santhosh; 11.09.2012
comment
У меня нет никакого кода для этого, вы должны понять это сами. оверлеи можно добавлять и удалять с карты динамически. Все, что вам нужно сделать, это иметь отдельный массив наложений для каждого адреса и динамически заменять их на карте. - person Urban; 11.09.2012
comment
Решено с помощью статических карт Google... теперь я использую веб-просмотр вместо просмотра карты Google в моем XML-файле. И раздувание этого веб-просмотра в моей деятельности и загрузка необходимого местоположения путем передачи значений latt, longt в статические карты Google... Вот ссылка: developers.google.com/maps/documentation/staticmaps/ - person Santhosh; 11.09.2012
comment
Это действительно хорошая альтернатива. У него есть свои недостатки в том смысле, что пользователь не сможет прокручивать и видеть места поблизости (если они находятся за пределами карты), но я думаю, в вашем случае это должно быть хорошо. - person Urban; 11.09.2012

Насколько я знаю, в настоящее время Android поддерживает только один MapView для каждой MapActivity.

person Helal Khan    schedule 11.09.2012