Я реализовал SupportMapFragment в двух фрагментах, используя одинаковые коды и процесс реализации. Один фрагмент загружается в виде прокрутки. Внезапно этот фрагмент показывает черный экран на нем. Только слово "Google" показывает. Но другой фрагмент работает хорошо. Я добавил ключ api в метаданные манифеста, а также добавил значения google_maps_api.xml. Все еще с черным экраном. Пожалуйста, помогите.
XML-код:
<LinearLayout
android:id="@+id/google_map_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center"
android:visibility="gone">
<fragment
android:id="@+id/map"
class="util.WorkaroundMapFragment"
android:layout_width="@dimen/localization_map_width"
android:layout_height="@dimen/localization_map_height">
</fragment>
</LinearLayout>
Java-код
GoogleMap mMap;
WorkaroundMapFragment mapFragment;
Фрагмент карты обхода:
public class WorkaroundMapFragment extends SupportMapFragment {
private OnTouchListener mListener;
@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {
View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);
TouchableWrapper frameLayout = new TouchableWrapper(getActivity());
frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));
((ViewGroup) layout).addView(frameLayout,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return layout;
}
public void setListener(OnTouchListener listener) {
mListener = listener;
}
public interface OnTouchListener {
public abstract void onTouch();
}
public class TouchableWrapper extends FrameLayout {
public TouchableWrapper(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mListener.onTouch();
break;
case MotionEvent.ACTION_UP:
mListener.onTouch();
break;
}
return super.dispatchTouchEvent(event);
}
}
}
карта инициализации
if (mapFragment == null) {
mapFragment = (WorkaroundMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
}
mapFragment.setListener(() -> scrollView.requestDisallowInterceptTouchEvent(true));
if (mMap == null) {
mapFragment.getMapAsync(this);
} else {
settingMapOnLatLng();
}
Инициализация карты
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
settingMapOnLatLng();
}