Добавьте google maps api v2 во фрагмент drawerlayout

Я пытался вставить карту в макет ящика с фрагментом, используя Android Studio. Я уже добился отображения карты, но не могу добавить к ней маркеры. Я хотел знать, что я делаю неправильно. И есть ли другой способ добавить карту в макет ящика?

Вот моя основная активность:

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;
}


}

Мой фрагмент карты:

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));


}

}

При этом все работает хорошо, но маркеры не отображаются. Я пытался добавить это (и все варианты, которые я нашел) в класс MapFragment, но он говорит: «Не удается разрешить метод getSupportFragmentManager»:

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

Мой 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>

person ariverof    schedule 08.03.2016    source источник


Ответы (1)


Я нашел решение!! Я следил за ответом, данным Боссом здесь: Пытаюсь поставить карта в активности фрагмента

Я только немного изменил. Вместо того, чтобы добавлять фрагмент в транзакцию, я заменил его (в MapFragment.java), а затем в onCreate в MainActivity я добавил фрагмент вместо его замены.

В MainActivity (внутри onCreate):

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