2

コードをエラーなしで取得することができましたが、起動時に、mMap = mapFrag.getMap(); の行で常に null ポインター例外が発生します。

これはなぜですか?いくつかのインポートまたはいくつかの手順がありませんか? 問題の原因が SupportMapFragment オブジェクトなのか GoogleMap オブジェクトなのかはわかりません。

package com.fragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MapFragment extends SherlockMapFragment {

    private GoogleMap mMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = super.onCreateView(inflater, container, savedInstanceState);
        SupportMapFragment mapFrag= (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map);
        mMap = mapFrag.getMap(); //null pointer is here
        return root;
    }
}

編集:これは、この質問で与えられた解決策に基づく実装の一部です

4

2 に答える 2

2

FragmentMaps V2 を使用するために、必ずしもカスタム サブクラスを使用する必要はありません。フラグメントが単なるマップである場合は、アクティビティからMapFragmentまたはを作成し、そこで構成できます。SupportMapFragment

SherlockMapFragmentマップを ActionBarSherlock ベースのアプリの一部にするために、何らかの作成を行う必要さえありません。通常SupportMapFragmentは問題なく動作します。

フラグメントにより多くのビジネス スマートが必要であり、 ActionBarSherlock を使用してて、問題のビジネス ロジックが ActionBarSherlock に関連することを行う必要がある場合 (たとえば、アクション アイテムをアクション バーに提供する)、その場合にのみ実行します。ある種のSherlockMapFragment.

この要点に作業が含まれていることを確認できますSherlockMapFragmentcom.actionbarsherlock.appActionBarSherlock の残りの部分へのパッケージで保護されたアクセスが必要なため、パッケージに入ることに注意してください。

次に、次を作成するなど、それをサブクラス化できますMyMapFragment

public class MyMapFragment extends SherlockMapFragment {
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    if (getMap() != null) {
      Log.d(getClass().getSimpleName(), "Map ready for use!");
    }
  }
}

呼び出すタイミングには少し注意が必要です。getMap()早すぎると戻ってきnullます。onActivityCreated()自由に試すことができますが、かなり安全な時期のようです。

次に、使用するMyMapFragment場所ならどこでも使用します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.commonsware.android.mapsv2.sherlock.MyMapFragment"/>

上記のコードを含む完全なプロジェクトを次に示します。

于 2013-01-26T19:07:05.680 に答える
0

SherlockMapFragment などの追加のクラスを実装する必要はありません。Fragment または SherlockFragment クラス コード内で SupportMapFragment を処理できます。これを見てください。

于 2013-07-23T07:13:57.453 に答える