Autore Topic: Mapview non si vede su cambio orientamento e cambio Fragment  (Letto 602 volte)

Offline A2PLab

  • Nuovo arrivato
  • *
  • Post: 37
  • [Close The World - txeN ehT nepO]
  • Respect: +1
    • Google+
    • http://it.linkedin.com/in/giuseppemastroeni
    • a2plab
    • a2plab
    • Mostra profilo
    • A2PLab
  • Dispositivo Android:
    HTC Desire, Acer Iconia Tab a500
  • Sistema operativo:
    Ubuntu 11.04
Mapview non si vede su cambio orientamento e cambio Fragment
« il: 24 Aprile 2012, 13:55:07 CEST »
0
Ciao a tutti,

in un post precedente ho discusso su come gestire un'activity con una mapview (non in un fragment) e altri fragment.

Ricapitolando:

  • Ho una activity con all'interno una mapView e due fragment
  • Un fragment è una topbar, la qule non cambia su cambio orientamento
  • Un fragment è una sidebar con una listview, la quela a seconda dell'orientamento viene visualizzata di lato o in basso e la listview di trasforma in gallery(non so come rendere le listview orizontali)

Quello che faccio è che ad ogni cambio orientamento rimpiazzo il fragment della sidebar creandone una nuova istanza e quindi con il layout corretto.
Per fare questo ho messo nel Manifest:
Codice (XML): [Seleziona]
android:configChanges="orientation|screenSize|smallestScreenSize"
cosi devo gestire io il cambio orientamento, e lo faccio con questa funzione:

Codice (Java(TM) 2 Platform Standard Edition 5.0): [Seleziona]
private void init() {
                if (mapHolder == null) {
                        mapHolder = (FrameLayout) findViewById(R.id.mapHolder);
                } else {
                        mapHolder.removeView(mapView);
                }

                if (mapView == null) {
                        mapView = new MapView(this, this.getString(R.string.map_api_key));
                        this.center = new GeoPoint(DEFAULT_LATITUDE, DEFAULT_LONGITUDE);
                        this.mapController = mapView.getController();
                        this.mapController.setCenter(this.center);
                        this.mapController.setZoom(DEFAULT_ZOOM_LEVEL);
                        this.mapView.setClickable(true);
                        this.mapView.requestFocus();
                }
                mapHolder.addView(mapView);
                mapView.invalidate();
               
                this.mFragmentManager = getFragmentManager();
                FragmentTransaction ft = mFragmentManager.beginTransaction();
                ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
                if (mSidebarFragment == null) {
                        mSidebarFragment = SideBarFragment.newInstance(deviceType);
                        ft.add(R.id.fragmentSideBarContent, mSidebarFragment, "sidebar");
                } else {
                        FragmentTransaction removeTrans = mFragmentManager.beginTransaction();
                        removeTrans.setTransition(FragmentTransaction.TRANSIT_EXIT_MASK);      
                        removeTrans.remove(mSidebarFragment);
                        removeTrans.addToBackStack(null);
                        removeTrans.commit();

                        mSidebarFragment = null;
                        mSidebarFragment = SideBarFragment.newInstance(deviceType);
                        ft.add(R.id.fragmentSideBarContent, mSidebarFragment, "sidebar");
                        ft.addToBackStack(null);

                }
                ft.commit();
                mFragmentManager.executePendingTransactions();
                this.mSidebarFragment.setDeviceType(deviceType);               
        }

questa funziona viene chiamata nella onCreate() e nella onConfigChanges() in questo modo inizializzo l'activity e i fragment e poi gestisco la sostituzione del fragment.

Funziona tutto correttamente!

Quindi vi chiederete: ma perchè hai scritto il post?

Lo ho scritto perchè quando giro il tablet, la mappa si vede tutta distorta, e non viene renderizzata bene. Quando poi torno all'orientazione iniziale funziona perfettamente e conservando lo stato ovviamente.
Questo succede a prescindere da quale orientazione ha il tablet all'avvio dell'app....l'altra non si vede la mappa.

qualcuno ha idee del perchè?
O qualcuno ha idee su come gestire meglio il cambio di una sidebar o una listview e soprattutto un fragment quando nell'activity c'è una Mapview?
« Ultima modifica: 24 Aprile 2012, 13:56:44 CEST da pippopeppe »
[Close The World - txeN ehT nepO]