2

I have two FrameLayout in an activity, I just replace fragments inside those FrameLayout. It works great with everyfragment BUT the one containing the MapFragment for the GoogleMap. When I first launch the app it works and I see the map (everything works) but when I replace the fragment and replace it back I just get a blank space like nothing is loaded.

public class MapFragment extends CustomFragment {
    private GoogleMap mMap;
    private Marker currentMarker;
    private OnFragmentInteractionListener mListener;
    public static final String ID = "MAP_FRAGMENT";
    private static View view;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = null;
        try {
            view = inflater.inflate(R.layout.fragment_map, container, false);
        } catch (InflateException e) {
            Log.d("","");
        }finally{
            setUpMapIfNeeded();
            if(view!=null)this.view=view;
            return this.view;
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Fragment f = getFragmentManager().findFragmentById(R.id.map);
        if (f != null)getActivity().getFragmentManager().beginTransaction().remove(f).commit();
        mMap=null;
        currentMarker=null;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((com.google.android.gms.maps.MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }

    private void setUpMap() {
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void update(FragmentMessage message) {
        if(mMap!=null) {
            Location loc = (Location) message.getMessages()[0];
            if (currentMarker != null)
                currentMarker.remove();
            currentMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(loc.getLatitude(), loc.getLongitude())).title("Marker"));
            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(new LatLng(loc.getLatitude(), loc.getLongitude()))      // Sets the center of the map to Mountain View
                    .zoom(15)                   // Sets the zoom
                    .build();                   // Creates a CameraPosition from the builder
            mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        }
    }
}

The mMap is never null, so the MapFragment is working I guess but I don't get anything on the screen (see screenshots below). At app launch After switching from another fragment

Does anyone have an idea ? I really don't know what is wrong.

rXp
  • 617
  • 2
  • 12
  • 25

0 Answers0