MapFragment未初始化

时间:2016-11-01 07:30:02

标签: android google-maps android-fragments mapfragment

我一直在导航抽屉活动中工作,它有很多片段,其中一个片段包含 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);
}

}

1 个答案:

答案 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后立即隐藏它。