android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment

android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment,第1张

概述我刚刚切换到最新版本的 android-maps-extensions(2.2.0)以及最新的Play Services(6.5.87)和支持库(21.0.3). 现在我无法重用我的MapFragment. 我有NavigationArawer的MainActivity.其中一个片段是里面有GoogleMap片段的片段.当我在NavigationDrawer中切换片段时,他们重新创建自己.以前我使 我刚刚切换到最新版本的 android-maps-extensions(2.2.0)以及最新的Play Services(6.5.87)和支持库(21.0.3).
现在我无法重用我的MapFragment.

我有Navigationarawer的MainActivity.其中一个片段是里面有GoogleMap片段的片段.当我在NavigationDrawer中切换片段时,他们重新创建自己.以前我使用非常简单的解决方案.我用过已经夸大的视图:

public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,final Bundle savedInstanceState) {    super.onCreateVIEw(inflater,container,savedInstanceState);    if (vIEw != null) {        VIEwGroup parent = (VIEwGroup) vIEw.getParent();        if (parent != null) {            parent.removeVIEw(vIEw);        }        return vIEw;    }    vIEw = inflater.inflate(R.layout.fragment_map,false);    SupportMapFragment mapFragment = SupportMapFragment.newInstance();    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();    transaction.add(R.ID.container,mapFragment).commit();    mapFragment.getExtendedMapAsync(new OnMapReadyCallback() {        public voID onMapReady(GoogleMap GoogleMap) {            map = GoogleMap;            setupMap();        }    });    return vIEw;}

但现在它不起作用.此片段第二次打开时,地图不会显示.

我可以抛弃这个丑陋的代码

if (vIEw != null) {        VIEwGroup parent = (VIEwGroup) vIEw.getParent();        if (parent != null) {            parent.removeVIEw(vIEw);        }        return vIEw;    }

并始终用内部重新创建视图.但是我有成千上万的标记(当然有很棒的聚类)并且需要很多时间来重新绘制它们.

我知道这不是扩展库的问题,谷歌地图有相同的行为.但也许你知道正确的决定?

解决方法 我们可以使用MapVIEw,而不是使用MapFragment,它也存在于androIDmapsextensions中.它可以重复使用.

由于以编程方式添加MapVIEw,需要调用mapVIEw.onCreate(bundle)

private MapVIEw mapVIEw;public VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) {    super.onCreateVIEw(inflater,savedInstanceState);    VIEw vIEw = inflater.inflate(R.layout.fragment_map,false);    if (mapVIEw != null) {                VIEwGroup parentVIEwGroup = (VIEwGroup) mapVIEw.getParent();        if (parentVIEwGroup != null) {            parentVIEwGroup.removeVIEw(mapVIEw);                    }    } else {        mapVIEw = new MapVIEw(getActivity());        mapVIEw.onCreate(Bundle.EMPTY); //need if programmatically add     }        ((VIEwGroup)vIEw.findVIEwByID(R.ID.container)).addVIEw(mapVIEw);    mapVIEw.getExtendedMapAsync(new OnMapReadyCallback() {        public voID onMapReady(GoogleMap GoogleMap) {            setUpMap(GoogleMap);        }    });    }

或者,如果我们不需要任何重用mapVIEw的设置

public VIEw onCreateVIEw(LayoutInflater inflater,false);    boolean needSetupMap = true;    if (mapVIEw != null) {                VIEwGroup parentVIEwGroup = (VIEwGroup) mapVIEw.getParent();        if (parentVIEwGroup != null) {            parentVIEwGroup.removeVIEw(mapVIEw);            needSetupMap = false;        }    } else {        mapVIEw = new MapVIEw(getActivity());        mapVIEw.onCreate(Bundle.EMPTY);    }      ((VIEwGroup)vIEw.findVIEwByID(R.ID.container)).addVIEw(mapVIEw);    if (needSetupMap) {        mapVIEw.getExtendedMapAsync(new OnMapReadyCallback() {            public voID onMapReady(GoogleMap GoogleMap) {                setUpMap(GoogleMap);            }        });    }}
总结

以上是内存溢出为你收集整理的android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment全部内容,希望文章能够帮你解决android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1127769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存