Всем здравствуйте!
Впервые делаю приложение с картами. Суть такова: есть Navigation Drawer и несколько (пока) фрагментов. До этого использовал карты через Activity, сейчас перешёл на Fragment и тут добавил mapView в xml разметке этого фрагмента: в итоге карта не отображается при нажатии на элемент Menu Item (непосредственно навигация), само приложение на смартфоне не вылетает, просто белый экран. На карте в будущем собираюсь из SQLlite добавлять метки, поэтому нужна возможность манипулировать кодом в классе карты.
Разметка:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.498"
tools:ignore="MissingConstraints" />
</android.support.constraint.ConstraintLayout>
Код класса:
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
public class CustomMapFragment extends Fragment implements OnMapReadyCallback {
private MapView mapView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_map, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Activity activity = this.getActivity();
mapView = activity.findViewById(R.id.mapView);
mapView.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
}
Разрешения манифеста:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.provides.gsf.permission.READ_GSERVICES" />