removeView von Fragment

Ich bin mit einer Karte Aktivität ein Fragment, die hosts-MAPS.

All dies ist in einem Register, wie unten gezeigt

removeView von Fragment

Nun jedes mal bin ich in der Registerkarte Karten und gehen Sie zur Registerkarte "Details" und kommen zurück, ich erhalte die folgende Fehlermeldung.

12-04 06:05:37.858: E/AndroidRuntime(20034): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

PlaceActivity.java

public class PlaceActivity extends SherlockFragmentActivity implements
        OnShareTargetSelectedListener {

     private static final String MAPS_KEY = "0rQAS47Cicu2t78I-QQ";
        FragmentManager fm = getSupportFragmentManager();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //TODO Auto-generated method stub
        super.onCreate(savedInstanceState);  
        MapView mMapView = new MapView(PlaceActivity.this, MAPS_KEY);

        mMapView.setClickable(true);
        Exchanger.mMapView = mMapView;


        //setContentView(R.layout.activity_place);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tabDetails = actionBar.newTab();
        ActionBar.Tab tabMaps = actionBar.newTab();

        tabDetails.setText("Details");
        tabMaps.setText("Maps");

        tabDetails.setTabListener(new MyTabListener());
        tabMaps.setTabListener(new MyTabListener());

        actionBar.addTab(tabDetails);
        actionBar.addTab(tabMaps);
    }

    private class MyTabListener implements ActionBar.TabListener {
        @Override
        public void onTabSelected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            //TODO Auto-generated method stub
            if (tab.getPosition() == 0) {
                DetailsFragment fragment = new DetailsFragment();
                ft.replace(android.R.id.content, fragment);

            } else {

                fm.beginTransaction().add(android.R.id.content, MapSample.GeoGigMapFragment.newInstance()).commit();
                //MapsFragment fragment = new MapsFragment();
                //ft.replace(android.R.id.content, fragment);
                //ft.commit();
            }
        }

        @Override
        public void onTabUnselected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            //TODO Auto-generated method stub
        }

        @Override
        public void onTabReselected(Tab tab,
                android.support.v4.app.FragmentTransaction ft) {
            //TODO Auto-generated method stub
        }

    }
.
.
.
.
.
}

Meine Karten Aktivität

MapSample.java

public class MapSample extends MapActivity {

    MapView mMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
    }

    public static final class GeoGigMapFragment extends Fragment 
    {

        static GeoGigMapFragment newInstance() 
        {
            GeoGigMapFragment map = new GeoGigMapFragment();
            return map;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) 
        {
            MapView mMapView = Exchanger.mMapView;
            return mMapView;
        }

    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        //((ViewGroup)mMapView.getParent()).removeView(mMapView);
        //mMapView.removeView(mMapView);

        //mMapView.removeAllViews();

        //ViewParent som = mMapView.getParent();
        //((ViewGroup) som).removeView(mMapView);

        if (mMapView != null) 
        {
            //NoSaveStateFrameLayout parentView = (NoSaveStateFrameLayout)
            //mMapView.getParent();
            //parentView.removeView(mMapView);
            ((ViewGroup) mMapView.getParent()).removeAllViews();
        }

    }

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

Was ich erreichen will ist, jedes mal, wenn ich Sie DetailsTab ich will zerstören die MapSample oder die Karte Anzeigen, so dass ich nicht den Fehler.

Voller Fehler-Trace

12-04 06:26:38.808: E/AndroidRuntime(22066): FATAL EXCEPTION: main
12-04 06:26:38.808: E/AndroidRuntime(22066): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.view.ViewGroup.addViewInner(ViewGroup.java:3339)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.view.ViewGroup.addView(ViewGroup.java:3210)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.view.ViewGroup.addView(ViewGroup.java:3155)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.view.ViewGroup.addView(ViewGroup.java:3131)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.NoSaveStateFrameLayout.wrap(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.BackStackRecord.run(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.os.Handler.handleCallback(Handler.java:725)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.os.Looper.loop(Looper.java:137)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at android.app.ActivityThread.main(ActivityThread.java:5039)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at java.lang.reflect.Method.invokeNative(Native Method)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at java.lang.reflect.Method.invoke(Method.java:511)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-04 06:26:38.808: E/AndroidRuntime(22066):    at dalvik.system.NativeStart.main(Native Method)
  • food for thought: erst gestern veröffentlichte Google eine neue version der Maps-API können Sie tun, Weg mit MapActivity - du kannst nun einfach eine MapFragment! Dies würde ermöglichen es Ihnen, verwenden Sie einen ViewPager mehr wie es soll... android-developers.blogspot.com/2012/12/...
  • wow. das ist gute Nachricht, daß jeder, wo ich gelesen habe, dass es nicht gibt.. können wir gleich benutzen ?
  • wie haben Sie dieses problem zu beheben?
Schreibe einen Kommentar