2015-07-14 2 views
1

Я пытаюсь отобразить MapView от ArcGis в Android Studio. Я использую для этого фрагменты карты, я поместил в xml карту и другие элементы интерфейса. Ввод MapView элемента в файле макета всегда падает, поэтому я делаю это так:MapFragment ArcGis - У указанного дочернего элемента уже есть родительский

my_main_activity.xml

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/maps_app_activity_drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<!-- The main content view --> 

<FrameLayout 
    android:id="@+id/maps_app_activity_content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<!-- The navigation drawer --> 
<ListView 
    android:id="@+id/maps_app_activity_left_drawer" 
    style="@style/drawer_listView_style" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@android:color/darker_gray" 
    android:choiceMode="singleChoice" 
    android:divider="@color/esri_gray" 
    android:dividerHeight="1px" /> 

и это расположение framgent: map_fragment_layout. XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map_fragment_map_container_frame_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<!-- The map configuration --> 
<com.esri.android.map.MapView 
    android:id="@+id/map_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    initExtent = "-9934033.827 1537316.31 -9933312.043 1537940.728" > <!-- xmin ymin xmax ymax --> 
</com.esri.android.map.MapView> 

Мой класс карта фрагмент имеет все конфигурации MapView:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

    mMapContainer = (FrameLayout) inflater.inflate(R.layout.map_fragment_layout,container,false); 

    // Add dynamic layer to MapView (Base) 
    // Retrieve the map and initial extent from XML layout 
    MapView mapView = (MapView)mMapContainer.findViewById(R.id.map_layout); 
    ArcGISDynamicMapServiceLayer baseMap = new ArcGISDynamicMapServiceLayer(baseMapURL); 
    mapView.addLayer(baseMap); 
    //Creates a dynamic layer using service URL 
    ArcGISDynamicMapServiceLayer dynamicLayer = new ArcGISDynamicMapServiceLayer(dynamicMapURL); 
    //Adds layer into the 'MapView' 
    mapView.addLayer(dynamicLayer); 

    // Set the MapView to allow the user to rotate the map when as part of a pinch gesture. 
    setMapView(mapView); 
    mapView.zoomin(); 

    return mMapContainer; 
} 

функция setMapView настраивает остальные параметры MapView:

private void setMapView(final MapView mapView) { 

    mMapView = mapView; 
    mMapView.setEsriLogoVisible(false); 
    mMapView.enableWrapAround(true); 
    mapView.setAllowRotationByPinch(true); 

    // Creating an inflater 
    mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    // Setting up the layout params for the searchview and searchresult layout 
    mlayoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP); 
    mlayoutParams.setMargins(LEFT_MARGIN_SEARCH, TOP_MARGIN_SEARCH,RIGHT_MARGIN_SEARCH, BOTTOM_MARGIN_SEARCH); 

    // set MapView into the activity layout 
    mMapContainer.addView(mMapView); 

    // Displaying the searchbox layout 
    showSearchBoxLayout(); 

После отладки эта ошибка появляется:

java.lang.RuntimeException: Unable to start activity ComponentInfo{zero.ucamaps/zero.ucamaps.MainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
     at android.view.ViewGroup.addViewInner(ViewGroup.java:3936) 
     at android.view.ViewGroup.addView(ViewGroup.java:3786) 
     at android.view.ViewGroup.addView(ViewGroup.java:3727) 
     at android.view.ViewGroup.addView(ViewGroup.java:3700) 
     at zero.ucamaps.MapFragment.setMapView(MapFragment.java:313) 
     at zero.ucamaps.MapFragment.onCreateView(MapFragment.java:209) 
     at android.app.Fragment.performCreateView(Fragment.java:2053) 

Я попытался удалить MapView из m это родительский элемент перед возвратом из getMapView(), и это все еще происходит сбой. Любая помощь вообще будет оценена по достоинству.

ответ

1

Вы пытаетесь добавить MapView в тот же контейнер дважды, один раз в Java и один раз в XML.

В map_fragment_layout.xml вы создаете MapView в качестве ребенка FrameLayout под названием map_fragment_map_container_frame_layout. Хорошо.

Тогда в setMapView, вы звоните mMapContainer.addView(mMapView), который пытается добавить MapView снова как ребенок того же FrameLayout. Это вызывает исключение и не является необходимым. Удалите эту строку кода.

+0

Большое спасибо! Я дам ему попробовать – aikaSan21

+0

Это сработало! спасибо большое – aikaSan21

+0

Отлично! Для этого есть кнопка! :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^