0

J'ai essayé d'insérer une carte dans une disposition de tiroir avec un fragment en utilisant Android Studio. J'ai déjà réussi à afficher une carte, mais je ne peux pas y ajouter de marqueurs. Je voulais savoir ce que je fais mal. Et existe-t-il un autre moyen d'ajouter une carte à une disposition de tiroir?Ajouter google maps api v2 dans un fragment tiroirallout

Voici mon MainActivity:

package com.example.alex.testing_map; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MapsActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(
      this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer); 

    drawerLayout.setDrawerListener(drawerToggle); 
    drawerToggle.syncState(); 

    Fragment fragment = new MapFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.frame_content, fragment); 
    ft.commit(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
     drawerLayout.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item){ 

    switch (item.getItemId()){ 
     case R.id.add_item: 
      Intent intent = new Intent(this, AddMail.class); 
      this.startActivity(intent); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

    return true; 

} 


@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    Fragment fragment = null; 

    switch (item.getItemId()){ 
     case R.id.mapa: 
      fragment = new MapFragment(); 
      FragmentTransaction ft1 = getSupportFragmentManager().beginTransaction(); 
      ft1.replace(R.id.frame_content, fragment); 
      ft1.commit(); 
      break; 
     case R.id.help: 
      fragment = new Help(); 
      FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction(); 
      ft2.replace(R.id.frame_content, fragment); 
      ft2.commit(); 
      break; 
     case R.id.about: 
      break; 
     default: 
      return true; 

    } 

    DrawerLayout drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); 
    drawerLayout.closeDrawer(GravityCompat.START); 
    return true; 
} 


} 

Mon MapFragment:

package com.example.alex.testing_map; 

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.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 MapFragment extends Fragment implements OnMapReadyCallback{ 


private GoogleMap mMap; 

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


} 



@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 


    mMap.getUiSettings().setCompassEnabled(false); 
    mMap.getUiSettings().setIndoorLevelPickerEnabled(false); 
    mMap.getUiSettings().setMapToolbarEnabled(false); 
    mMap.getUiSettings().setRotateGesturesEnabled(false); 
    mMap.getUiSettings().setZoomControlsEnabled(false); 


    LatLng p1 = new LatLng(41.39355, 2.15473); 
    mMap.addMarker(new MarkerOptions().position(p1)); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 18)); 


} 

} 

Avec ce tout fonctionne bien, mais les marqueurs ne sont pas affichés. J'ai essayé d'ajouter ce (et toutes les variantes que j'ai trouvé) à la classe MapFragment, mais il dit « ne peut pas résoudre la méthode « getSupportFragmentManager » »:

 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

Mon fichier xml:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="match_parent" 
android:layout_width="match_parent"> 

<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="513dp" 
tools:context="com.example.alex.testing_map.MapsActivity" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true"/> 

</RelativeLayout> 

Répondre

0

J'ai trouvé une solution !! J'ai suivi la réponse donnée par Boss ici: Trying to put a map in a fragment activity

J'ai seulement changé une petite chose. Au lieu d'ajouter le fragment dans la transaction, je l'ai remplacé (dans MapFragment.java), puis dans onCreate dans MainActivity j'ai ajouté le fragment au lieu de le remplacer.

Dans le MainActivity (à l'intérieur du onCreate):

Fragment fragment = new MapFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.frame_content, fragment); 
    ft.commit();