1. ホーム
  2. android

[解決済み] フラグメント(ハニカム)でのMapView

2023-06-24 17:56:13

質問

最終的なSDKはgoogle apisと一緒に公開されましたが、MapViewでFragmentを作成する最善の方法は何ですか?MapViewは正しく動作するためにMapActivityを必要とします。

フラグメントを管理するアクティビティに MapActivity を継承させ(フラグメントが自己完結しているという考えに反するため、悪い解決策です)、通常の xml ベースのレイアウトを使用すると、うまくいきません。MapActivity.setupMapView() で NullPointerException を受け取ります。

E/AndroidRuntime( 597): 原因:java.lang.NullPointerException
E/AndroidRuntime( 597): at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:400)
E/AndroidRuntime( 597): at com.google.android.maps.MapView.MapView(MapView.java:289)
E/AndroidRuntime( 597): at com.google.android.maps.MapView.(MapView.java:264)
E/AndroidRuntime( 597): at com.google.android.maps.MapView.(MapView.java:247)

私の2番目のアイデアは、プログラムでMapViewを作成し、関連するアクティビティを(getActivity()を介して)MapViewコンストラクタにContextとして渡すことでした。うまくいきません。

E/AndroidRuntime( 834): 原因:java.lang.IllegalArgumentException: MapViews は、MapActivity のインスタンスの内部でのみ作成することができます。
E/AndroidRuntime( 834): at com.google.android.maps.MapView.MapView(MapView.java:291)
E/AndroidRuntime( 834): at com.google.android.maps.MapView.(MapView.java:235)
E/AndroidRuntime( 834): at de.foo.FinderMapFragment.onCreateView(FinderMapFragment.java:225)
E/AndroidRuntime( 834): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:708)
E/AndroidRuntime( 834): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:900)
E/AndroidRuntime( 834): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:978)
E/AndroidRuntime( 834): at android.app.Activity.onCreateView(Activity.java:4090)
E/AndroidRuntime( 834): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)

本当は、MapViewが必要とするバックグラウンドスレッドを引き受けるMapFragmentのようなものがあるはずなのですが...。それで、これを行うための現在のベストプラクティスは何ですか?

ドイツからありがとう、そしてよろしく。 ヴァレンティン

どのように解決するのですか?

2012年12月3日現在、Googleは Google Maps Android API v2 . これで、これらの問題は忘れることができます。 https://developers.google.com/maps/documentation/android/

新しいAPIを使用した例 https://developers.google.com/maps/documentation/android/start#add_a_map

このAPIは少なくともAndroid API 8で動作しますので、使ってみてください ;)

ということで、フラグメントクラス(com.google.android.gms.maps.MapFragment")を使用することで簡単に実現できます。これで、Activityに地図が表示されます。上記のリンクからレイアウトの例をご覧ください。

<?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"/>