0

SDK バージョン 10 で MapView を作成しようとしていますが、MapView を作成する方法のすべての例では、API 11 のみにあるFragmentsを使用しています。

https://developers.google.com/maps/documentation/android/map#add_a_map_to_an_android_application

サポート ライブラリを追加したくありません。

アプリをロードすることはできましたが、マップが空の灰色のグリッドとして表示されます。これらは、ログ ファイルに準関連行のみとして表示されます。

03-08 23:20:25.088: W/dalvikvm(32615): VFY: unable to resolve instance field 23
03-08 23:20:25.088: D/dalvikvm(32615): VFY: replacing opcode 0x52 at 0x0012
03-08 23:20:25.088: D/dalvikvm(32615): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
03-08 23:20:25.213: D/dalvikvm(32615): GC_CONCURRENT freed 1276K, 48% free 3765K/7175K, external 9476K/10157K, paused 5ms+8ms
03-08 23:20:25.236: I/dalvikvm(32615): Total arena pages for JIT: 11
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/p/s; (427)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/p/s;' failed
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/y/bo; (3820)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/y/bo;' failed
03-08 23:20:25.541: W/dalvikvm(32615): Unable to resolve superclass of Lmaps/i/k; (4208)
03-08 23:20:25.541: W/dalvikvm(32615): Link of class 'Lmaps/i/k;' failed
03-08 23:20:25.541: E/dalvikvm(32615): Could not find class 'maps.i.k', referenced from method maps.z.ag.a
03-08 23:20:25.541: W/dalvikvm(32615): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag;
03-08 23:20:25.541: D/dalvikvm(32615): VFY: replacing opcode 0x22 at 0x006d
03-08 23:20:25.627: D/dalvikvm(32615): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag;
03-08 23:20:26.275: D/MPAY(32615): map = com.google.android.gms.maps.GoogleMap@40718398
4

4 に答える 4

1

フラグメントは API 11 以降からサポートされ、マップはMapFragmentAndroid のクラスの拡張であるクラスにカプセル化されるようになりましたFragment。これで、マップをより大きなアクティビティの一部として追加できるようになりました。オブジェクトを使用するMapFragmentと、携帯電話などの小さな画面でマップを単独で表示したり、タブレットなどの大画面デバイスでより複雑な UI の一部としてマップを表示したりできます。そのため、Google は、API 11 以下で実装するためのサポート ライブラリも提供しています。

android-support-v4.jarアプリケーションでライブラリを使用して、以下のように GoogleMap を実装できます。

プロジェクトにサポート ライブラリを追加するにはGoto->android SDK->extras->android->support->v4->android-support-v4.jar. この jar ファイルをコピーしてアプリケーションの libs フォルダーに追加し、ビルド パスに追加するだけです。その後、フラグメントを使用して GoogleMap を追加できます。

ここでは、API 10 以下で GoogleMap を実装する方法を紹介します。

まず、GoogleMap のサポート ライブラリ Fragment を使用する必要があるため、代わりにレイアウト ファイルでMapFragment使用します。SupportMapFragment

   <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.SupportMapFragment"/>

Java ファイルで、以下のようにマップにアクセスします。

public class MapActivity extends android.support.v4.app.FragmentActivity {

       private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
            // Try to obtain the map from the SupportMapFragment.
         mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
    }
   }
于 2013-03-09T04:07:52.960 に答える
0

私はその方法を知りました。onResume()、onPause()などを実装する必要があるなど、たくさんの小さなことでした...テストのためにmapView.onCreate()を呼び出すだけでうまくいくと思いましたが、それだけでは不十分だったと思います。

GooglePlayライブラリにもサンプルがあります...\Java\android-sdk\extras\google\google_play_services\samples\maps\src\com\example\mapdemo\RawMapViewDemoActivity.java

この例ではFragmentActivityを拡張していますが、これは必須ではなく、android.support.v4。*もインポートしていません。

public class RawMapViewDemoActivity extends Activity {
    private MapView mMapView;
    private GoogleMap mMap;

    protected void onCreate(Bundle savedInstanceState) {
        ...
        mMapView = (MapView) findViewById(R.id.map);
        mMapView.onCreate(savedInstanceState);


    protected void onResume() {
        super.onResume();
        mMapView.onResume();

    protected void onPause() {
        mMapView.onPause();
        super.onPause();


    protected void onDestroy() {
        mMapView.onDestroy();
        super.onDestroy();


    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();


    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mMapView.onSaveInstanceState(outState);
于 2013-03-09T05:15:23.017 に答える
0

現在、すべてのバージョンでサポートされていますが、ライブラリがないと使用できません。特にジェイク

wharton の sherlock ライブラリhttps://github.com/JakeWharton/ActionBarSherlock は、

すべてのバージョンでサポート。MapView および android sherlock mapview の mapview バルーンを使用できます

jar ファイルが提供されています。それを使用できます。

https://github.com/JakeWharton/ActionBarSherlock-Plugin-Maps/

于 2013-03-09T04:05:55.063 に答える
0

答えは、(おそらく)できないということだと思います。

Google Maps Android API v2の概要には、次のように書かれています。

  • マップは、Android の Fragment クラスの拡張である MapFragment クラスにカプセル化されるようになりました。これで、マップをより大きなアクティビティの一部として追加できるようになりました。MapFragment オブジェクトを使用すると、携帯電話などの小さな画面でマップを単独で表示したり、タブレットなどの大画面デバイスでより複雑な UI の一部としてマップを表示したりできます。
  • マップは MapFragment クラスにカプセル化されているため、バージョン 1 で使用されていた MapActivity を拡張するのではなく、Android 標準の Activity クラスを拡張することで実装できます。

明示的には述べられていませんが、v2 のマップは基本的に Fragment に依存していることを暗示していると読んでいます。

SDK 10 以前を使用する必要があり、ある種の のバックポートをFragment使用できない場合は、おそらく Google Maps API v2 を使用できません。

于 2013-03-09T03:57:07.407 に答える