我一直在导航抽屉活动中工作,它有很多片段,其中一个片段包含 MapFragment 。
现在 MapFragment 中存在问题i-e当我第一次打开包含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版本创建这个应用程序。
任何帮助都会很明显。 问候。
更新 我通过将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);
}
}
答案 0 :(得分:1)
我认为你的第一行代码就是让你的片段消失的原因。 删除它:
if (mapFragment == null)
mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapView);
每当您将片段作为子片段添加到现有片段时,您都希望使用getChildFragmentManager()。
编辑: 要显示/隐藏/删除子片段,您可以使用以下方法之一:
getChildFragmentManager().beginTransaction().hide(fragment).commit();
getChildFragmentManager()。beginTransaction()有各种管理片段的方法,例如show / remove / replace / add等。
您可以试试这些,但我不确定您为何希望在创建MapFragment后立即隐藏它。