Я работаю в Активность навигационного ящика, он содержит много фрагментов, а один из фрагментов содержит MapFragment.MapFragment не получает инициализацию
В настоящее время существует проблема в MapFragment т.е. Когда в первый раз я открыть фрагмент, содержащий MapFragment внутри него все работает отлично, но когда я перейти к какому-либо другому фрагменту, используя getFragmentManager().beginTransaction().replace(...)
, а затем вернуться к предыдущему фрагменту, используя getFragmentManager().popBackStack();
Мой mapFragment.getView()
не работает, вы можете просмотреть мой код MapFragment
private void initMap() {
if (mapFragment == null)
mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapView);
if (mapFragment == null)
mapFragment = (MapFragment) this.getChildFragmentManager().findFragmentById(R.id.mapView);
if (mapFragment == null) {
Toast.makeText(getActivity(), "mapFragment not initialized", Toast.LENGTH_SHORT).show();
}
if (mapFragment.getView() == null) {
Toast.makeText(getActivity(), "getView not initialized", Toast.LENGTH_SHORT).show();
}
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap mMap) {
googleMap = mMap;
Toast.makeText(getActivity(), "map intialized", Toast.LENGTH_SHORT).show();
// For showing a "move to my location" button
CheckPermissions cp = new CheckPermissions(getActivity());
if (cp.getPermission(Manifest.permission.ACCESS_COARSE_LOCATION) || cp.getPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
// enableMyLocation();
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION);
}
mUiSettings = mMap.getUiSettings();
mUiSettings.setZoomControlsEnabled(true);
mUiSettings.setCompassEnabled(true);
cameraListener();
markerListener();
mapListener();
}
});
}
выше метод называется, если следующий метод
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initMap();
if (mapFragment.getView() != null) {
mapFragment.getView().setVisibility(View.GONE);
}
}
Я много искал на каждой платформе, но не получал никакой помощи. и я не хочу использовать SupportFragmentManager, потому что я не создаю это приложение для старых версий Android.
Любая помощь будет заметна. С уважением.
UPDATE Я отсортировали мою проблему временно, поставив MapFragment внутри RelativeLayout и скрывая это RelativeLayout
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initMap();
relativeLayout = (RelativeLayout) view.findViewById(R.id.rel_layout);
if (relativeLayout != null) {
relativeLayout.setVisibility(View.GONE);
}
}
Спасибо за ваше предложение, но я уже пробовал, к сожалению, это не помогает:/ – Tahir
GoogleMap становится инициализирован только проблема с mapFragment.getView() всегда returing нулевого – Tahir
MapFragment, как следует из названия, фрагмент. Если вы хотите показать/скрыть/удалить его, используйте правильные методы фрагментации и FragmentManager вместо прямого взаимодействия с представлением. –