gpt4 book ai didi

android - MapFragment 未初始化

转载 作者:行者123 更新时间:2023-11-30 00:54:47 28 4
gpt4 key购买 nike

我一直在Navigation Drawer Activity 中工作,它有很多 fragment ,其中一个 fragment 包含MapFragment

现在 MapFragment 中出现问题,即当我第一次打开其中包含 MapFragment 的 fragment 时,一切正常,但是一旦我使用 getFragmentManager( ).beginTransaction().replace(...)然后使用 getFragmentManager().popBackStack();

返回到上一个 fragment

我的 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);
}

最佳答案

我认为您的第一行代码使您的 fragment 消失了。删除这个:

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

每当您将 fragment 作为子 fragment 添加到现有 fragment 时,您都需要使用 getChildFragmentManager()。

编辑:要显示/隐藏/移除子 fragment ,您可以使用以下方法之一:

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

getChildFragmentManager().beginTransaction()有多种管理 fragment 的方法,比如show/remove/replace/add等

您可以尝试这些,但我不确定您为什么希望在创建 MapFragment 后立即隐藏它。

关于android - MapFragment 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40355791/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com