java - Can't refresh FrameLayout? -


i'm starting studies android development , can't refresh app's framelayout correctly.

this framelayout (panela) holding streetviewpanorama fragment , every time after remove fragment framelayout , try add one, entire framelayout freezes showing last fragment image.

you can see code below

    package com.example.shanx.project_track_it_v001;      import android.support.v4.app.fragmentactivity;     import android.os.bundle;     import android.util.log;     import android.view.view;     import com.example.shanx.utilities.maphandler;     import com.google.android.gms.maps.cameraupdatefactory;     import com.google.android.gms.maps.googlemap;     import com.google.android.gms.maps.onmapreadycallback;     import com.google.android.gms.maps.onstreetviewpanoramareadycallback;     import com.google.android.gms.maps.streetviewpanorama;     import com.google.android.gms.maps.supportmapfragment;     import com.google.android.gms.maps.model.latlng;     import com.google.android.gms.maps.model.markeroptions;      public class mapsactivity extends fragmentactivity implements onmapreadycallback,                                                           onstreetviewpanoramareadycallback {          private static final string initial_position = "rio de janeiro";          //application's map handler         private maphandler mhandler = new maphandler();          //application's map         private static googlemap mmap;          //application's street view         private static streetviewpanorama mstreetview;          //application's map activity         public static mapsactivity mactivity;          @override         protected void oncreate(bundle savedinstancestate) {              super.oncreate(savedinstancestate);              //set activity's layout content view             setcontentview(r.layout.activity_maps);              // obtain supportmapfragment , notified when map ready used.             supportmapfragment mapfragment = (supportmapfragment) getsupportfragmentmanager()             .findfragmentbyid(r.id.map);              //set (a instance of) callback on fragment             mapfragment.getmapasync(this);              mactivity = this;          }             @override         public void onmapready(googlemap googlemap) {              double latitudearray[] = {24.345, -20.7444, 56.877, -79.2762, 77.128, 69.12, -32.111, 45.785, 77.896, -56.7888};             double longitudearray[] = {-124.345, -80.7444, 116.877, 33.2762, 177.128, 52.4567, -132.111, 25.785, 97.896, -156.7888};              mmap = googlemap;             mhandler.setmaptype(mmap, googlemap.map_type_normal);              // add marker in rio de janeiro , move camera             latlng initialpos = new latlng(-22.907166,-43.176911);              mmap.addmarker(new markeroptions().position(initialpos).title("marker in " + initial_position));             mmap.movecamera(cameraupdatefactory.newlatlng(initialpos));              //polylineencoder.printdata(latitudearray, longitudearray);              mmap.setpadding(0, 0, 0, 100);             mmap.getuisettings().setzoomcontrolsenabled(true);             mmap.getuisettings().setallgesturesenabled(true);             try {                 mmap.setmylocationenabled(true);             }             catch(securityexception e){                 e.printstacktrace();             }             mmap.getuisettings().setmylocationbuttonenabled(true);             mmap.getuisettings().setcompassenabled(true);             mmap.setbuildingsenabled(true);         }          @override         public void onstreetviewpanoramaready(streetviewpanorama streetviewpanorama) {              mstreetview = streetviewpanorama;             mstreetview.setposition(new latlng(-22.907166,-43.176911));          }          public void buttonpressed(view buttonpressed){              mhandler.showstreetview(this);          }          public static googlemap getmap(){              return mmap;          }          public static streetviewpanorama getstreetview(){              return mstreetview;          }      } 

and other class:

    package com.example.shanx.utilities;     import android.app.fragmenttransaction;     import android.graphics.canvas;     import android.util.log;     import android.view.view;     import com.example.shanx.project_track_it_v001.mapsactivity;     import com.example.shanx.project_track_it_v001.r;     import com.google.android.gms.maps.googlemap;     import com.google.android.gms.maps.streetviewpanoramafragment;     import com.google.android.gms.maps.streetviewpanoramaoptions;      public final class maphandler {          private boolean isstreetviewloaded = false;         private streetviewpanoramafragment streetviewfragment;         private fragmenttransaction fragmenttransaction;          public void setmaptype(googlemap map, int type){              switch(type){                 case googlemap.map_type_none:                     map.setmaptype(googlemap.map_type_normal);                     break;                 case googlemap.map_type_terrain:                     map.setmaptype(googlemap.map_type_terrain);                     break;                 case googlemap.map_type_satellite:                     map.setmaptype(googlemap.map_type_satellite);                     break;                 case googlemap.map_type_hybrid:                     map.setmaptype(googlemap.map_type_hybrid);                     break;                 default: map.setmaptype(googlemap.map_type_normal);             }          }          public void showstreetview(mapsactivity activity) {              if (!isstreetviewloaded)                 addstreetview(activity);                 else removestreetview(activity);          }          private void addstreetview(mapsactivity activity){              if((view view = activity.findviewbyid(r.id.panela)) != null){                   view.setvisibility(view.visible);                   view.invalidate();                }                  streetviewpanoramaoptions streetviewoptions = new streetviewpanoramaoptions();             streetviewoptions.panninggesturesenabled(true);             streetviewoptions.zoomgesturesenabled(true);             streetviewoptions.streetnamesenabled(true);              streetviewfragment = streetviewpanoramafragment.newinstance(streetviewoptions);             fragmenttransaction = activity.getfragmentmanager().begintransaction();             //panela framelayout want show fragment             fragmenttransaction.add(r.id.panela, streetviewfragment);             fragmenttransaction.commit();              streetviewfragment.getstreetviewpanoramaasync(activity);              isstreetviewloaded = true;          }          private void removestreetview(mapsactivity activity){              fragmenttransaction.remove(streetviewfragment);                     //view view = activity.findviewbyid(r.id.panela);             //view.setvisibility(view.visible);             //view.invalidate();              isstreetviewloaded = false;          }      } 

instead of fragmenttransaction.add() use fragmenttransaction.replace(). because when fragment exist, make use of replace method replacing existing fragment.

but why add() --> remove() --> add() didn't?

whenever call fragmenttransaction.commit(); schedules commit of transaction. commit not happen immediately, scheduled work on main thread. before doing other operation, call fragmentmanager.executependingtransactions(); executes such pending operations.

a single remove didn't not removed previous image framelayout (i mean, framelayout didn't call redraw())

it not problem framelayout. check if passing correct fragment removed.


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -