
我的应用程序有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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)