как отобразить карту Google внутри фрагмента

#java #android-studio #google-maps #android-fragments

#java #android-studio #google-карты #android-фрагменты

Вопрос:

итак, у меня есть bottomNavigationView то, что содержит вкладки и переходит к фрагментам с помощью setOnNavigationItemSelectedListener()

в одном из фрагментов мне нужно отобразить карты Google, но я получаю эту ошибку:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync (com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference

несмотря на то, что я инициализировал SupportMapFragment прямо над строкой ошибки getMapAsync() следующим образом : supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.google_map);

вот как выглядит мой код

xml:

 <fragment
    android:id="@ id/my_map"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    tools:context=".NearbyFragment">
</fragment>
 

и в коде Java (NearbyFragment.java) я поместил весь код в onCreateView :

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

        supportMapFragment = (SupportMapFragment)
getChildFragmentManager().findFragmentById(R.id.google_map);

        supportMapFragment.getMapAsync(this); // ERROR IN THIS LINE

        client = LocationServices.getFusedLocationProviderClient(getContext());

        getCurrentLocation();

        return view;
}
 

это метод для getCurrentLocation();

 public void getCurrentLocation() {
        if (..permission == granted){

            Task<Location> task = client.getLastLocation();
            task.addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    if (location != null){
                        supportMapFragment.getMapAsync(new OnMapReadyCallback() {
                            @Override
                            public void onMapReady(GoogleMap googleMap) {
                                // init Lat Lng
                                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
                                CameraPosition cameraPosition = CameraPosition.builder().target(latLng).zoom(16).bearing(0).tilt(0).build();
                                googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
                                // creat marker options
                                MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("im here");
                                // add marker
                                googleMap.addMarker(markerOptions);
                            }
                        });
                    }
                }
            });
        }
        else {
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
        }
    }
 

Я не знаком с Fragment тем, как это работает, когда я использую его Activity с небольшими изменениями, но мне это нужно, Fragment пожалуйста, помогите

Комментарии:

1. ваш идентификатор карты в XML-файле — my_map. вы пытаетесь получить R.id.google_map в вашем фрагменте Java-кода.

2. Я исправил это, но все равно получаю ту же ошибку @beherad