fragment 中的 Android Google Maps V2

标签 android google-maps

我正在 android 17 中创建一个应用程序,我正在尝试包含 Google Maps v2。

在我当前的设置中,我有一个带有两个选项卡的 ActionBar,一个指向旅行信息,一个指向 Google map 。

我可以让 Google map 显示在主要 Activity 中,但我无法让 map 显示在 fragment 中。

这是我的 map 类代码:

// Will hold the information for the "Maps" tab
public class Maps extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setCustomView(R.layout.rowlayout);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Venue Map

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        RelativeLayout layoutView = (RelativeLayout)inflater.inflate(R.layout.action_bar_tab, null);
        TextView tabText = (TextView) layoutView.findViewById(R.id.tabText);
        ImageView tabImage = (ImageView) layoutView.findViewById(R.id.tabImage);

        String venueMapTab = "Travel Information";
        Tab tab = actionBar.newTab();
        TabListener<VenueMap> dayOne = new TabListener<VenueMap>(this,
                venueMapTab, VenueMap.class);
        tab.setTabListener(dayOne); 
        tabText.setText("Venue Map");
        tab.setCustomView(layoutView);
        actionBar.addTab(tab);

        // Google Maps

        RelativeLayout layoutViewMaps = (RelativeLayout)inflater.inflate(R.layout.action_bar_tab, null);
        tabText = (TextView) layoutViewMaps.findViewById(R.id.tabText);
        tabImage = (ImageView) layoutViewMaps.findViewById(R.id.tabImage);

        String googleMapsTab = "Google Maps";
        tab = actionBar.newTab();
        TabListener<GoogleMaps> dayTwo = new TabListener<GoogleMaps>(this,
                googleMapsTab, GoogleMaps.class);
        tab.setTabListener(dayTwo);
        tabText.setText("Google Maps");
        tab.setCustomView(layoutViewMaps);
        actionBar.addTab(tab);

    }

这是我的 Google map fragment

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getActivity().setContentView(R.layout.google_maps);
}

还有 google_maps.xml:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment"/>

还有我的日志猫错误:

01-28 13:44:09.830: E/AndroidRuntime(22253): FATAL EXCEPTION: main
01-28 13:44:09.830: E/AndroidRuntime(22253): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zshare.blog/com.zshare.blog.Maps}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.os.Looper.loop(Looper.java:137)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread.main(ActivityThread.java:5039)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at java.lang.reflect.Method.invokeNative(Native Method)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at java.lang.reflect.Method.invoke(Method.java:511)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at dalvik.system.NativeStart.main(Native Method)
01-28 13:44:09.830: E/AndroidRuntime(22253): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Activity.setContentView(Activity.java:1881)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.zshare.blog..VenueMap.onActivityCreated(VenueMap.java:32)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Fragment.performActivityCreated(Fragment.java:1703)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Activity.onCreateView(Activity.java:4736)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Activity.setContentView(Activity.java:1881)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at com.zshare.blog.VenueMap.onActivityCreated(VenueMap.java:32)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Fragment.performActivityCreated(Fragment.java:1703)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Activity.performStart(Activity.java:5113)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
01-28 13:44:09.830: E/AndroidRuntime(22253):    ... 11 more
01-28 13:44:09.830: E/AndroidRuntime(22253): Caused by: java.lang.IllegalArgumentException: Binary XML file line #2: Duplicate id 0x7f05003b, tag null, or parent id 0x1020002 with another fragment for com.google.android.gms.maps.MapFragment
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.app.Activity.onCreateView(Activity.java:4722)
01-28 13:44:09.830: E/AndroidRuntime(22253):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
01-28 13:44:09.830: E/AndroidRuntime(22253):    ... 35 more

如果我在 Activity 中显示 map ,它会工作,但在 fragment 中我会收到错误。任何解决此问题的帮助将不胜感激:)

最佳答案

因为 onActivityCreated()Fragment 上的一个方法,看起来您正在尝试让一个 fragment 加载一个 fragment ,虽然可以使用 Android 支持库,不会与您正在使用的 native fragment 一起使用。也不清楚您一开始为什么要这样做。

您的“Google map fragment ”应该 com.google.android.gms.maps.MapFragment 或者应该继承自 com.google.android.gms.maps.MapFragment,但它不应该是尝试加载 com.google.android.gms.maps.MapFragment 的一些单独 fragment

关于 fragment 中的 Android Google Maps V2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563598/

相关文章:

java - 在 Android SQLite 表中返回 Count(*)

android - 在 ScrollView 屏幕底部定位按钮并设置比例宽度

Javascript/jQuery - 浮点验证?

android - 如何在 WebView 的 Android 上独立滚动行和列(la Netflix 应用程序)?

android - Android 和 iOS 的 Unity 命令行参数

android - 需要帮助理解 GLES 2.0 的 glDrawElements

javascript - KMZ 文件会加载到 Google 地球,但不会加载到 Google map

php - 将 JSON 值分配给来自 Google Maps API 查询的 PHP 数组

javascript - 在 Google map 上绘制文字

javascript - ruby on Rails 无法 JavaScript 未加载