Google Haritalar V2'yi ViewPager kullanarak bir Fragman'a yerleştirme


138

Play Store'da aynı sekme düzenini yapmaya çalışıyorum. Ben androidhive bir parça ve viewpager kullanarak sekme düzenini görüntülemek lazım. Ancak, google maps v2'yi uygulayamıyorum . Zaten saatlerce internette arama yaptım, ancak nasıl yapılacağına dair bir eğitim bulamıyorum. Bazıları bana nasıl olduğunu gösterebilir mi?


3
3 yıl önce sorduğum soruya geri dönmem çok komik, böylece nasıl uygulanacağını hatırlayabiliyorum.
Jeongbebs

Bunu bir kez kullanıldı Activityve bir Fragmentkez getChildFragmentManager()kullanıldı arasında çok fazla fark yok .
NecipAllef

Yanıtlar:


320

Bu kodu kullanarak MapView'i herhangi bir ViewPager veya Fragment veya Activity içinde kurabiliriz.

Haritalar için Google'ın en son güncellemesinde, parçalar için yalnızca MapView desteklenir. MapFragment & SupportMapFragment çalışmıyor. Yanlış olabilir ama MapFragment & SupportMapFragment uygulamaya çalıştıktan sonra gördüm budur.

Haritayı dosyada gösterme düzenini ayarlama location_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Şimdi, haritayı dosyada göstermek için Java sınıfını kodladık MapViewFragment.java:

public class MapViewFragment extends Fragment {

    MapView mMapView;
    private GoogleMap googleMap;

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

        mMapView = (MapView) rootView.findViewById(R.id.mapView);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume(); // needed to get the map to display immediately

        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;

                // For showing a move to my location button
                googleMap.setMyLocationEnabled(true);

                // For dropping a marker at a point on the Map
                LatLng sydney = new LatLng(-34, 151);
                googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));

                // For zooming automatically to the location of the marker
                CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
                googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
            }
        });

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

Son olarak, uygulamanızı Google Cloud Console'a kaydederek uygulamanız için API Anahtarını almanız gerekir . Uygulamanızı Yerel Android Uygulaması olarak kaydedin.


2
<uses-library android:name="com.google.android.maps" android:required="true" />Haritalar V1 içindir, Haritalar V2 için değil. Gelecekte com.google.android.mapsürün yazılımı kütüphanesine sahip olmayan, ancak Maps V2 haritalarını mükemmel bir şekilde gösterebilen cihazlar olacak . Manifestinizde bu çizginin bulunması, bu tür cihazlarda çalışmanızı engelleyecektir ve bu çizgi Maps V2 kullanımı için gerekli değildir. Örneğin, github.com/commonsguy/cw-omnibus/tree/master/MapsV2 adresindeki 17 proje bu <uses-library>öğeye sahip değil ve iyi çalışıyor.
CommonsWare

7
Bu yöntemi kullanırken hata alıyorum. com.example.imran.maps.MeFragment.setUpMapIfNeeded (MeFragment.java:115) com.example.imran.maps.MeFragment.onCreateView adresindeki PID: 16260 java.lang.NullPointerException yardım edin (MeFragment.java:72) kodu burada: googleMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.map)). GetMap ();
İmran Ahmed

7
MMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.location_map)) üzerinde bir "NullPointerException" hatası alıyorum. GetMap ();
aletede91

4
Örnek kod parçası: mMap = ((SupportMapFragment) MainActivity.fragmentManager .findFragmentById (R.id.location_map)). GetMap (); findFragmentById () null değerini döndürürse getMap () içinde çökecektir.
Gunnar Forsgren - Mobimation

2
Evet bu işe yaramaz: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
Peter Weyand

146

Aşağıdaki yaklaşım benim için işe yarıyor.

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.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

/**
 * A fragment that launches other parts of the demo application.
 */
public class MapFragment extends Fragment {

MapView mMapView;
private GoogleMap googleMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.fragment_location_info, container,
            false);
    mMapView = (MapView) v.findViewById(R.id.mapView);
    mMapView.onCreate(savedInstanceState);

    mMapView.onResume();// needed to get the map to display immediately

    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }

    googleMap = mMapView.getMap();
    // latitude and longitude
    double latitude = 17.385044;
    double longitude = 78.486671;

    // create marker
    MarkerOptions marker = new MarkerOptions().position(
            new LatLng(latitude, longitude)).title("Hello Maps");

    // Changing marker icon
    marker.icon(BitmapDescriptorFactory
            .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

    // adding marker
    googleMap.addMarker(marker);
    CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(new LatLng(17.385044, 78.486671)).zoom(12).build();
    googleMap.animateCamera(CameraUpdateFactory
            .newCameraPosition(cameraPosition));

    // Perform any camera updates here
    return v;
}

@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
public void onPause() {
    super.onPause();
    mMapView.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mMapView.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mMapView.onLowMemory();
}
}

fragment_location_info.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

8
sen bir dahisin, hayatımı kurtardın. mMapView.onResume (); // haritanın hemen görüntülenmesi için gerekli olan anahtar oldu
Stephane

1
Aynı hatayı almaya devam ediyorum java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized. Try catch'in bununla ilgileneceğini düşündüm. Birisi bana yardım edebilir mi?

@BrandonYang harika bir adam .. Navigasyon çekmecesini ve harita kombinasyonunu çok basit bir şekilde çözmeyi başardım ... Şerefe !!
Sreehari

@BrandonYang: Neden tüm yaşam döngüsü geri çağrılarını neden aramanız gerektiğini biliyor musunuz mMapView?
Christian Aichinger

6
getMap()kullanımdan kaldırıldı. Bunun yerine getMapAsync ve onMapReadyCallback kullanın: stackoverflow.com/a/31371953/4549776
jmeinke

80

GoogleMapBir parçada kullanmak istiyorsanız bu satırı kullanabilirsiniz :

<fragment
            android:id="@+id/map"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.SupportMapFragment" />

GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();

4
Cevabın için teşekkür ederim! diğer tüm yanıtlar en son destek kitaplıklarıyla
çalışmaz

1
bir parçanın içindeki parçayı iyi bir uygulama olarak mı adlandırıyor? Bu uygulama performansını ve İyi yazılım tasarımını nasıl etkiler?
AouledIssa

49

Kullanımdan getMapAsynckaldırılanlar yerine en son kullanılanlar.

1. bildirimi kontrol edin

<meta-data android:name="com.google.android.geo.API_KEY" android:value="xxxxxxxxxxxxxxxxxxxxxxxxx"/>

Uygulamanızı kaydederek uygulamanızın API Anahtarını alabilirsiniz Google Cloud Console. Uygulamanızı Yerel Android Uygulaması olarak kaydedin

2. fragman düzeninizde .xml FrameLayout ekleyin (fragment değil):

                  <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_weight="2"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:id="@+id/mapwhere" />

veya ne kadar yükseklik istersen

3. Parçanızdaki onCreateView içinde

    private SupportMapFragment mSupportMapFragment; 

    mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapwhere);
    if (mSupportMapFragment == null) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        mSupportMapFragment = SupportMapFragment.newInstance();
        fragmentTransaction.replace(R.id.mapwhere, mSupportMapFragment).commit();
    }

    if (mSupportMapFragment != null)
    {
        mSupportMapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override public void onMapReady(GoogleMap googleMap) {
                if (googleMap != null) {

                    googleMap.getUiSettings().setAllGesturesEnabled(true);

                      -> marker_latlng // MAKE THIS WHATEVER YOU WANT

                        CameraPosition cameraPosition = new CameraPosition.Builder().target(marker_latlng).zoom(15.0f).build();
                        CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
                        googleMap.moveCamera(cameraUpdate);

                }

            }
        });

3
Teşekkürler, Çok zaman kazanın, bu en son kütüphane güncellemeleri ile bugünkü doğru cevaptır.
Sam

Benim için işe yaramadı. Bunu fark etmek için çok zaman harcadım, <fragmentbunun yerine düzendeFrameLayout
user3448282

IMO kodda küçük ama önemli bir hata var. FragmentManager olmalı fragmentManager = getChildFragmentManager (); SupportMapFragment eklerken getFragmentManager yerine. Kod şimdi olduğundan, onCreateView çağrıldığında harita parçası her zaman eklenir (bu, harita durumunu korumadığından kötüdür). Ayrıca, getMapAsync sadece ilk ayarları sadece bir kez gerçekleştirmek için sadece şube mSupportmapFragment == null çağırır!
user1299412

@ user1299412 dostum, gönderiyi düzenleyebilirsiniz, yanıtı güncelleyeceğim. :)
OWADVL

Ben değiştiğinde SupportMapFragmentiçine MapFragmentaktivitede değişti FrameLayoutiçine fragmentdüzeni dosyasında ve ve değişen com.google.android.gms.maps.SupportMapFragmentiçine com.google.android.gms.maps.MapFragmentbunun için beni para cezası çalışır. Bu değişikliklerden önce işe yaramadı. Belki bu başkalarına yardımcı olur ....
CodeNinja

10

burada detaylı olarak ne yaptım:

Buradan google map api key alabilirsiniz

alternatif ve basit bir yol

önce google hesabınıza giriş yapın ve google kütüphanelerini ziyaret edin ve Google Haritalar Android API'sını seçin

android studio varsayılan harita etkinliğinde bağımlılık bulundu:

compile 'com.google.android.gms:play-services:10.0.1'

aşağıdaki gibi uygulama altında android mainifest dosyasına anahtarınızı koyun

AndroidMainifest.xml dosyasında şu değişiklikleri yapın:

    // required permission
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


        // google map api key put under/inside <application></application>
        // android:value="YOUR API KEY"
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzasdfasdf645asd4f847sad5f45asdf7845" />

Parça kodu:

public class MainBranchFragment extends Fragment implements OnMapReadyCallback{

private GoogleMap mMap;
    public MainBranchFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.fragment_main_branch, container, false);
        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.main_branch_map);
        mapFragment.getMapAsync(this);
        return view;
    }




     @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            LatLng UCA = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(UCA).title("YOUR TITLE")).showInfoWindow();

            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(UCA,17));

        }
    }

size xml parçası:

<fragment
                android:id="@+id/main_branch_map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context="com.googlemap.googlemap.MapsActivity" />

`gMapFragment.getMapAsync`, getMapAsync üzerinde çözülmemiş bir referansa sahiptir. Bu işe yaramıyor.
Peter Weyand

aktivite mi yoksa parçalı mısın?
dharmx

bu çalışıyor! ama bir parçanın içinde bir parçayı çağırmanın iyi bir uygulama olup olmadığından emin değilim! Lütfen tavsiye
AouledIssa

5

NullPointerExceptionSekmeleri değiştirdiğimizde bir alma sorunu için, FragmentTabHostbu kodu sahip olduğunuz sınıfınıza eklemeniz yeterlidir TabHost. Sekmeleri başlattığınız sınıf demek istiyorum. Bu kod:

/**** Fix for error : Activity has been destroyed, when using Nested tabs 
 * We are actually detaching this tab fragment from the `ChildFragmentManager`
 * so that when this inner tab is viewed back then the fragment is attached again****/

import java.lang.reflect.Field;

@Override
public void onDetach() {
    super.onDetach();
    try {
        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);
    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}

"Alan" türüne ne aktarmalıyım? Birçok olasılık var.
Jeongbebs

sana projemi göndermeli miyim? ve sonra belki bana ne yapacağımı söyle?
Jeongbebs

proje e-postanıza gönderildi.
Jeongbebs

google-play-service.jar dosyasını projenize eklemediniz ve ayrıca project.properties dosyasını "target = android-18" yerine "target = Google Inc.: Google API'ları: 18" olarak değiştirmeniz gerekiyor
arshu

1
Bu hata Android Açık Kaynak sorun izleyicisinde izleniyor: code.google.com/p/android/issues/detail?id=42601
Kristopher Johnson

4
public class DemoFragment extends Fragment {


MapView mapView;
GoogleMap map;
LatLng CENTER = null;

public LocationManager locationManager;

double longitudeDouble;
double latitudeDouble;

String snippet;
String title;
Location location;
String myAddress;

String LocationId;
String CityName;
String imageURL;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater
                .inflate(R.layout.fragment_layout, container, false);

    mapView = (MapView) view.findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);

  setMapView();


 }

 private void setMapView() {
    try {
        MapsInitializer.initialize(getActivity());

        switch (GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getActivity())) {
        case ConnectionResult.SUCCESS:
            // Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT)
            // .show();

            // Gets to GoogleMap from the MapView and does initialization
            // stuff
            if (mapView != null) {

                locationManager = ((LocationManager) getActivity()
                        .getSystemService(Context.LOCATION_SERVICE));

                Boolean localBoolean = Boolean.valueOf(locationManager
                        .isProviderEnabled("network"));

                if (localBoolean.booleanValue()) {

                    CENTER = new LatLng(latitude, longitude);

                } else {

                }
                map = mapView.getMap();
                if (map == null) {

                    Log.d("", "Map Fragment Not Found or no Map in it!!");

                }

                map.clear();
                try {
                    map.addMarker(new MarkerOptions().position(CENTER)
                            .title(CityName).snippet(""));
                } catch (Exception e) {
                    e.printStackTrace();
                }

                map.setIndoorEnabled(true);
                map.setMyLocationEnabled(true);
                map.moveCamera(CameraUpdateFactory.zoomTo(5));
                if (CENTER != null) {
                    map.animateCamera(
                            CameraUpdateFactory.newLatLng(CENTER), 1750,
                            null);
                }
                // add circle
                CircleOptions circle = new CircleOptions();
                circle.center(CENTER).fillColor(Color.BLUE).radius(10);
                map.addCircle(circle);
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

            }
            break;
        case ConnectionResult.SERVICE_MISSING:

            break;
        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:

            break;
        default:

        }
    } catch (Exception e) {

    }

}

fragment_layout içinde

<com.google.android.gms.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="match_parent"
                android:layout_height="160dp"                    
                android:layout_marginRight="10dp" />

harita parçasını başka bir parçanın arkasına taşımanın bir yolu var mı? menü parçası? Bir şekilde ferahlatıcı ve menü parçasını geri kalmak yerine arkaya gönderiyor.
sitilge

Aslında ne yapmak istiyorsun?
Vaishali Sutariya

3

Harita kullanımını eklediğinizde:

getChildFragmentManager().beginTransaction()
    .replace(R.id.menu_map_container, mapFragment, "f" + shabbatIndex).commit();

yerine .addve yerine getFragmentManager.


1

Ben sadece MapActivity oluşturmak ve parçalara şişirmek. 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:

<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"
    tools:context="com.example.ahmedsamra.mansouratourguideapp.MapsActivity" />

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

}

ne? hayır ..... ne?
rexxar

0

NullPointerExceptionÜzerinde parçası kaldırmak zaman için bir çözüm var DestoryView, Sadece kodunuzu koymak onStop()değil onDestoryView. İyi çalışıyor!

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

0

Https://developer.android.com/about/versions/android-4.2.html#NestedFragments'a göre , bunun yerine Google Haritalar parçasını kullanmak istiyorsanız getChildFragmentManager () öğesini çağırarak bunu elde etmek için iç içe geçmiş parçaları kullanabilirsiniz. kendi parçanızın içinde görüntüleme:

SupportMapFragment mapFragment = new SupportMapFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.content, mapFragment).commit();

burada "içerik" parçanızdaki kök düzenidir (tercihen bir FrameLayout). Bir harita parçası kullanmanın avantajı, harita yaşam döngüsünün sistem tarafından otomatik olarak yönetilmesidir.

Belgeler "Bu düzen bir <fragment> içerdiğinde bir yerleşimi parçaya şişiremezsiniz. İç içe parçalar yalnızca bir parçaya dinamik olarak eklendiğinde desteklenir.", Bunu bir şekilde başarıyla yaptım ve iyi çalıştı. İşte benim kod:
Parçanın onCreateView () yönteminde:

View view = inflater.inflate(R.layout.layout_maps, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(...);

Düzende:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    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" />

Umarım yardımcı olur!


0

Çağrı cihazını görüntülemek için dinamik olarak harita parçası ekleme:

API düzey 12'den önceki bir uygulamayı hedefliyorsanız, SupportedMapFragment örneğini oluşturun ve görünüm sayfası bağdaştırıcınıza ekleyin.

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

API düzey 12 veya üstü MapFragment nesnelerini destekler

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

0

Kotlin yolu budur:

İçinde fragment_map.xmlolmalıdır:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Gözlerinde farklı MapFragment.ktolacaktır:

    private fun setupMap() {
        (childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?)!!.getMapAsync(this)
    }

Çağrı setupMap()içinde onCreateView.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.