android-在这里地图-在TabLayout的片段中使用MapFragment

android-在这里地图-在TabLayout的片段中使用MapFragment,第1张

概述我的应用程序有3个标签,其中一个要显示地图(HEREMAPS,而不是GoogleMaps).我能够使地图在Activity中完美运行,但是在FragmentClass中,当我尝试将Fragment视图转换为MapFragment时会引发错误.MapFragmentmapFragment=(MapFragment)getFragmentManager().fi

我的应用程序有3个标签,其中一个要显示地图(HERE MAPS,而不是Google Maps).我能够使地图在Activity中完美运行,但是在Fragment Class中,当我尝试将Fragment视图转换为MapFragment时会引发错误.

MapFragment mapFragment = (MapFragment)                 getFragmentManager().findFragmentByID(R.ID.mapfragment);

错误:
难以置信的类型:无法将androID.support.v4.app.support转换为com.here.androID.mpa.mapPing.MapFragment

如果我错了,请纠正我,但是发生这种情况的原因是因为我们无法在androID.support.v4.app.Fragment(中使用androID.app.Fragment(用于显示地图,如HERE MAPS DOC中的指示)用于TabsLayout).

我使用Google地图发现了许多与此错误有关的问题.但是使用HERE MAPS时只有两个(first,second)大约有相同的错误,并且没有一个真正有助于解决该问题.

在Google Maps中,您可以使用SupportMapFragment(),但是此方法仅适用于Google Maps.使用“这里地图”有什么解决方案吗?也许有不同的方法可以达到相同的目标?还是在TabLayout中实现此Here Maps时会丢失某些东西?

任何帮助将不胜感激!

我的代码:

MapFragment.java

  public class Map extends Fragment {        public Map() {}        public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,                                  Bundle savedInstanceState) {            VIEw vIEw = inflater.inflate(R.layout.fragment_map, container, false);            MapFragment mapFragment = (MapFragment)                     getFragmentManager().findFragmentByID(R.ID.mapfragment);            mapFragment.init(new OnEngineInitListener() {                @OverrIDe                public voID onEngineInitializationCompleted(                        OnEngineInitListener.Error error) {                    if (error == OnEngineInitListener.Error.NONE) {                        com.here.androID.mpa.mapPing.Map map = mapFragment.getMap();                    } else {                        System.out.println("ERROR: Cannot initialize MapFragment");                    }                }            };            return vIEw;        }

fragment_map.xml

<FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    tools:context="com.example.modulos.tabsMenu.Config">    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="0dp"        androID:ID="@+ID/mapFragmentContainer"        androID:layout_weight="1"        androID:orIEntation="vertical"        androID:gravity="center"        androID:background="#aaa" >        <fragment                        androID:ID="@+ID/mapfragment"            androID:layout_wIDth="fill_parent"            androID:layout_height="fill_parent"/>    </linearLayout>    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="0dp"        androID:layout_weight="1"        androID:orIEntation="vertical"        androID:gravity="center"        androID:background="#aaa" >            <!-- other things here -->    </linearLayout></FrameLayout>

解决方法:

由于HERE Maps SDK仅适用于API级别15和更高版本,因此不支持兼容性片段(在定位较低的API级别时主要需要该兼容性片段).
在某些情况下,即使您将AndroID 4或更高版本作为目标,您仍希望处理支持片段,在这些情况下,您必须使用HERE SDK的MapVIEw并将其自己嵌入到布局中.
请参见以下代码示例,其中还使用了MapVIEw:https://tcs.ext.here.com/sdk_examples/MapDownloader.zip

因此,它将如下所示:

在布局中添加MapVIEw:

<com.here.androID.mpa.mapPing.MapVIEw    androID:ID="@+ID/ext_mapvIEw"    androID:visibility="visible"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent" />

然后在您的代码中:

 @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mapVIEw = (MapVIEw) findVIEwByID(R.ID.ext_mapvIEw);        MapEngine.getInstance().init(this, engineInitHandler);    }  private OnEngineInitListener engineInitHandler = new OnEngineInitListener() {        @OverrIDe        public voID onEngineInitializationCompleted(Error error) {            if (error == Error.NONE) {                map = new Map();                mapVIEw.setMap(map);                // more map initial settings            } else {                Log.e(TAG, "ERROR: Cannot initialize MapEngine " + error);            }        }    };    @OverrIDe    public voID onResume() {        super.onResume();        MapEngine.getInstance().onResume();        if (mapVIEw != null) {            mapVIEw.onResume();        }    }    @OverrIDe    public voID onPause() {        if (mapVIEw != null) {            mapVIEw.onPause();        }        MapEngine.getInstance().onPause();        super.onPause();    }

处理MapEngine和MapVIEw的暂停和恢复很重要,否则您将获得较差的性能结果.

总结

以上是内存溢出为你收集整理的android-在这里地图-在TabLayout的片段中使用MapFragment全部内容,希望文章能够帮你解决android-在这里地图-在TabLayout的片段中使用MapFragment所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1120965.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存