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?
Réponses
Trop de publicités?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;
}
}
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; } }
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);
- Réponses précédentes
- Plus de réponses