【问题标题】:Setting a MapView v2 API in a xml layout crashes在 xml 布局中设置 MapView v2 API 崩溃
【发布时间】:2013-03-08 19:08:55
【问题描述】:

当我尝试创建一个片段来保存视图时,我正在尝试创建一个包含 MapView 的布局以及其他项目,它崩溃说找不到类(是的,我确实导入了谷歌播放服务库)

错误:

03-08 13:48:01.593: E/AndroidRuntime(30614): android.view.InflateException: Binary XML file line #7: Error inflating class com.google.android.gms.maps.MapView
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at com.ecm2.mobilemap.fragments.CurrentIncidentMapFrag.onCreateView(CurrentIncidentMapFrag.java:16)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.Fragment.performCreateView(Fragment.java:1695)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.os.Handler.handleCallback(Handler.java:725)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.os.Looper.loop(Looper.java:137)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.app.ActivityThread.main(ActivityThread.java:5041)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at java.lang.reflect.Method.invokeNative(Native Method)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at java.lang.reflect.Method.invoke(Method.java:511)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at dalvik.system.NativeStart.main(Native Method)
03-08 13:48:01.593: E/AndroidRuntime(30614): Caused by: java.lang.reflect.InvocationTargetException
03-08 13:48:01.593: E/AndroidRuntime(30614):    at java.lang.reflect.Constructor.constructNative(Native Method)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
03-08 13:48:01.593: E/AndroidRuntime(30614):    ... 20 more
03-08 13:48:01.593: E/AndroidRuntime(30614): Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
03-08 13:48:01.593: E/AndroidRuntime(30614):    at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
03-08 13:48:01.593: E/AndroidRuntime(30614):    at com.google.android.gms.maps.MapView.<init>(Unknown Source)

layout xml:(布局会改变我只是想让地图先工作)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<com.google.android.gms.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

还有我的片段

public class CurrentIncidentMapFrag extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle saved){
    View v = inflater.inflate(R.layout.current_incident_mapping_layout,container,false);

    return v;
}

}

我知道有一个地图片段,但我想要的不仅仅是一张地图,而且我不希望它占据片段中的整个视图,所以一个包含所有内容的视图的片段是我唯一的选择。

我怎样才能让地图显示出来?

【问题讨论】:

  • 您在这个项目中使用的 api 版本
  • @DjHacktorReborn 抱歉,我忘了在 v2 中添加它
  • 你使用的android api版本是否低于11
  • @DjHacktorReborn no min_sdk 是 14 aka ICS

标签: android google-maps-android-api-2


【解决方案1】:

你忘记输入你的 api 密钥

<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="***"
/>

并确保你在清单中有这一行

<uses-library android:name="com.google.android.maps" />

编辑

如果您在 onDestroyView() 中删除所有嵌套片段,您可以解决此问题。不知道这是否是一个合适的解决方案。

    public void onDestroyView() {
        super.onDestroyView(); 
        Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));  
        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
}

然后像往常一样在 onCreateView() 中给它们充气

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.map, container, false);
}

【讨论】:

  • API 密钥不应该在清单&lt;meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/&gt; 中声明吗?这就是它在文档中显示的内容
  • 您不应以任何方式将清单放入清单中,因为任何应用程序的清单都可以从第三方来源读取
  • 不一样的东西,这甚至不是新地图 api 版本所在的正确包
【解决方案2】:

我真的不明白,你是说你想使用 Google Map API V2。 但您正在尝试使用作为 Google Map API V1 对象的 MapView 对象。 如果你想创建一个带有版本的地图到这里:

link

这是我写的关于创建 Google Map API V2 的帖子。

【讨论】:

  • 不,我不想使用 v1 中的 mapview 对象,我想使用 v2 中的 MapView 对象。我想用地图创建一个片段,但我不想把地图变成视图中唯一的东西。我需要在布局中添加一些其他视图
  • Google Maps API V2 中没有 MapView 对象,您应该根据您的目标平台版本使用 MapFragment 或 SupportMapFragment。
  • 但是如果我使用地图片段,那么视图中唯一会出现的就是地图,对吗?我不想在地图下方添加一些视图
  • 这就是片段的美妙之处,它们不必占据所有的屏幕尺寸......您可以制作半屏地图并在其下方添加您想要的按钮。
  • 例如,这是一个我不久前使用 MapFragment 的带有地图的应用程序:stackoverflow.com/questions/14469208/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2014-08-24
相关资源
最近更新 更多