2016-11-01 3 views
1

Я работаю в Активность навигационного ящика, он содержит много фрагментов, а один из фрагментов содержит 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); 
} 

}

ответ

1

Я думаю, ваша первая строка кода, что делает ваш фрагмент исчезнет. Удалить это:

if (mapFragment == null) 
    mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapView); 

Всякий раз, когда вы добавляете фрагмент, как ребенок к существующему фрагменту, вы хотите использовать getChildFragmentManager().

EDIT: Чтобы показать/скрыть/удалить фрагмент ребенка, вы можете использовать один из следующих способов:.

getChildFragmentManager().beginTransaction().hide(fragment).commit(); 

getChildFragmentManager() BeginTransaction() имеет различные методы для управления фрагментами, такие как шоу/удалить/заменить/добавить и т. д.

Вы можете попробовать их, хотя я не уверен, почему вы хотите скрыть MapFragment сразу после его создания.

+0

Спасибо за ваше предложение, но я уже пробовал, к сожалению, это не помогает:/ – Tahir

+0

GoogleMap становится инициализирован только проблема с mapFragment.getView() всегда returing нулевого – Tahir

+0

MapFragment, как следует из названия, фрагмент. Если вы хотите показать/скрыть/удалить его, используйте правильные методы фрагментации и FragmentManager вместо прямого взаимодействия с представлением. –

 Смежные вопросы

  • Нет связанных вопросов^_^