Puedo cargar un mapa de google en Android fragmento de lo que está dentro de una actividad. Que ha estado trabajando muy bien.

Pero ahora quiero usar ViewPager para desplazarse entre los puntos de vista (clase android.support.v4.app.Fragment). No parece posible cargar un com.google.android.gms.maps.MapFragment en un fragmento.

Por ejemplo, en:

SoleMap.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;

public class SoleMap extends Fragment implements OnMapReadyCallback {

    MapFragment gMapFragment;
    GoogleMap gMap = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sole_map, container, false);

        gMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.soleViewMap);
        gMapFragment.getMapAsync(this);

        return view;
    }

    @Override
    public void onMapReady(GoogleMap map) {
        gMap = map;
        gMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new
                LatLng(49.39,-124.83), 20));
    }

}

La declaración

getFragmentManager().findFragmentById(R.id.holeViewMap);

provoca un error del compilador (tipos incompatibles).

He tratado de usar SupportMapFragment en su lugar, lo que elimina los errores del compilador, pero cuando ejecuto la aplicación, se cierra de inmediato con el mensaje de «Error de e/S: Conexión rechazada». Google docs se parecen indicar que se necesita una especial «Para el Trabajo» cuenta para el uso de la biblioteca de Compatibilidad. Es eso correcto? Si es así, supongo que estoy fuera de suerte.

La única otra manera de la que puedo ver es el uso de actividades, en lugar de fragmentos de host de mi punto de vista, es decir, deshacerse de la ViewPager.

Alguna sugerencia?

intente esto: stackoverflow.com/questions/19353255/…
Conexión rechazada: ¿tiene Google Maps API key en el manifiesto?
Creo que mi «conexión rechazada» el problema no estaba relacionado, probablemente, tiene que ver con una actualización del SDK de que necesitaba un apagado/reinicio. Para responder a su pregunta, sí, yo tenía mi manifiesto (con clave), que había estado trabajando previamente.

OriginalEl autor NLRicker | 2015-04-30

4 Comentarios

  1. 14

    En su sole_map.xml debe agregar un MapView, vamos a decir algo como esto:

    <?xml version="1.0" encoding="utf-8"?>
    <com.google.android.gms.maps.MapView
        android:id="@+id/soleViewMap"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    A continuación, obtener de su SoleMap fragmento con el id de view.findViewById(R.id.soleViewMap); Esto devolverá un MapView, entonces usted puede hacer lo que estamos haciendo ahora. Debería verse algo como esto:

    public class SoleMap extends Fragment implements OnMapReadyCallback {
    
      MapView gMapView;
      GoogleMap gMap = null;
    
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sole_map, container, false);
    
        gMapView = (MapView) view.findViewById(R.id.soleViewMap);
        gMapView.getMapAsync(this);
    
        return view;
      }
    
      @Override
      public void onMapReady(GoogleMap map) {
        gMap = map;
        gMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new
                LatLng(49.39,-124.83), 20));
      }
    }

    No te olvides de asociar su mapview con el fragmento del ciclo de vida de llamar a los eventos onCreate, onLowMemory, onPause, onResume y onDestroy (espero que no falta ninguna de ellas), y llamar a MapsInitializer.initialize(getContext()); así

    Todavía estoy trabajando en la implementación de esto, pero en caso de que alguien más está usando el anterior, creo que se requiere una corrección. En lugar de findFragmentById(), se debe usar findViewByID(). Yo soy capaz de compilar. Volveré lo antes posible para indicar si yo pudiera llegar a trabajar de esta manera.
    Tienes razón, mi mal, voy a hacer la corrección en un momento. Gracias!
    Ahora soy capaz de conseguir un mapa en uno de mis fragmentos. El anterior fue muy útil con respecto a la total corrección. Para ayudar con los detalles de la implementación, consulte gist.github.com/joshdholtz/4522551. También el Android de google docs para la clase MapView.
    Por qué MapView y no SupportMapFragment?
    Un millón de gracias ! este post debería tener +100, todo el mundo lo recuerde llamar a mMapView.onCreate() en createView y mMapView.onResume() en la devolución de llamada

    OriginalEl autor Jorge Mendez

  2. 8

    Aceptado respuesta es buen punto de inicio, pero si vamos a tratar de usar que va a fallar, no describir solución completa. Trabajo completo fragmento con el mapa que puede ser utilizado en ViewPager y Tabs ( aviso mediante el mapa en fragmeny del ciclo de vida de ):

    public class AttractionMapTabFragment extends AttractionTab implements OnMapReadyCallback {
    private ScrollMapView gMapView;
    private GoogleMap gMap;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_map, null);
    gMapView = (ScrollMapView) view.findViewById(R.id.map);
    gMapView.getMapAsync(this);
    //most important use onCreate;
    gMapView.onCreate(getArguments());
    return view;
    }
    @Override
    public void onMapReady(GoogleMap googleMap) {
    gMap = googleMap;
    gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new
    LatLng(51.3623329,21.7719342), 8));
    }
    @Override
    public void onResume() {
    super.onResume();
    if (gMapView != null)
    gMapView.onResume();
    }
    @Override
    public void onDestroy() {
    super.onDestroy();
    if (gMapView != null)
    gMapView.onDestroy();
    }
    @Override
    public void onStart() {
    super.onStart();
    if (gMapView != null)
    gMapView.onStart();
    }
    @Override
    public void onStop() {
    super.onStop();
    if (gMapView != null)
    gMapView.onStop();
    }
    @Override
    public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (gMapView != null)
    gMapView.onSaveInstanceState(outState);
    }
    }

    Personalizado MapView clase – es necesario si utilizamos ScrollView como padre, se da la posibilidad de mover el mapa.Si Usted no está utilizando ScrollView en esta pantalla, a continuación, estándar MapView puede ser utilizado.

    public class ScrollMapView extends MapView {
    public ScrollMapView(Context context, AttributeSet attributeSet) {
    super(context, attributeSet);
    }
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    /**
    * Request all parents to relinquish the touch events
    */
    getParent().requestDisallowInterceptTouchEvent(true);
    return super.dispatchTouchEvent(ev);
    }
    }

    Última cosa es el diseño – R.layout.fragment_map:

    <?xml version="1.0" encoding="utf-8"?>
    <your.app.ScrollMapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" />

    OriginalEl autor Maciej Sikora

  3. 1
    public class MapViewFragment extends Fragment implements OnMapReadyCallback{
    private GoogleMap mMap;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    //Inflate the layout for this fragment
    return inflater.inflate(R.layout.activity_maps, container, false);
    }
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //FragmentManager fragment = getActivity().getSupportFragmentManager();
    //Fragment fragment=(Fragment) getChildFragmentManager().findFragmentById(R.id.mapView);
    final SupportMapFragment myMAPF = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
    myMAPF.getMapAsync(this);
    }
    @Override
    public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    //Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(25.412383, 55.508085);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
    }

    OriginalEl autor Rahul Bhardwaj

  4. 0

    Escribir este código en tu activity_maps.xml

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

    OriginalEl autor Rahul Bhardwaj

Dejar respuesta

Please enter your comment!
Please enter your name here