144 votes

Comment mettre Google Maps V2 sur un fragment en utilisant ViewPager

Je suis en train d'essayer de faire une mise en page en onglets comme sur le Play Store. J'ai réussi à afficher la mise en page en onglets en utilisant des fragments et viewpager du site androidhive. Cependant, je n'arrive pas à implémenter google maps v2 dessus. J'ai déjà passé des heures à chercher sur internet, mais je ne trouve pas de tutoriel sur comment le faire. Est-ce que quelqu'un pourrait s'il vous plaît me montrer comment faire?

1voto

ahmed samra Points 23

J'ai juste créé MapActivity et je l'ai gonflée en fragment. MapActivity.java :

package com.example.ahmedsamra.mansouratourguideapp;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

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.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_categories);//layout for container
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new MapFragment())
                .commit();
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng mansoura = new LatLng(31.037933, 31.381523);
        mMap.addMarker(new MarkerOptions().position(mansoura).title("Marker in mansoura"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(mansoura));
    }
}

activity_map.xml :

MapFragment.java :-

package com.example.ahmedsamra.mansouratourguideapp;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * A simple {@link Fragment} subclass.
 */
public class MapFragment extends Fragment {

    public MapFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_maps, container, false);
        return rootView;
    }

}

0voto

J'ai une solution de contournement pour NullPointerException lorsque vous supprimez un Fragment dans on , il suffit de mettre votre code dans `onStop()` et non pas dans `onDestoryView`. Ça marche très bien!

@Override public void onStop() { super.onStop(); if (mMap != null) { MainActivity.fragmentManager.beginTransaction() .remove(MainActivity.fragmentManager.findFragmentById(R.id.location_map)).commit(); mMap = null; } }

0voto

Adeeb karim Points 196

Ajout dynamique de fragment de carte à un PagerView :

Si vous ciblez une application antérieure à la version de l'API 12, créez une instance de SupportMapFragment et ajoutez-la à votre adaptateur de vue par page.

SupportMapFragment supportMapFragment=SupportMapFragment.newInstance();
        supportMapFragment.getMapAsync(this);

Les appareils avec un niveau d'API de 12 ou supérieur supportent les objets MapFragment

MapFragment mMapFragment=MapFragment.newInstance();
            mMapFragment.getMapAsync(this);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X