2

次のコードでは、getMap() は null を返し、アプリを停止します。マップで何もしなければ (最後の 2 行を削除するなど)、マップは正しく表示されます。理由はありますか?ありがとう。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        FragmentManager fragmentManager = getSupportFragmentManager();
        SupportMapFragment mapFragment = SupportMapFragment.newInstance();
        mapFragmentId = mapFragment.getId();
        FragmentTransaction transaction =  fragmentManager.beginTransaction();
        transaction.add(R.id.my_container, mapFragment);
        transaction.commit();

        mMap = mapFragment.getMap();
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    }
4

2 に答える 2

3

重複: SupportMapFragment.getmap() が null を返す

レイアウト xml ファイルを確認してください。参照していないことに気付きました: android:name="com.google.android.gms.maps.SupportMapFragment" ではなく: android:name="com.google.android.gms.maps.MapFragment"

名前は次のようにする必要があります: android:name="com.google.android.gms.maps.SupportMapFragment"

于 2014-12-04T08:51:18.097 に答える
2

が null を返す場合getMap()は、Map がまだ準備できていないか、GooglePlayServicesが古くなっているためです。そのようなものを使用する方がよい:

int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if(resultCode != ConnectionResult.SUCCESS)
        {
            Builder builder = new AlertDialog.Builder(Main.this);
            builder.setMessage(getResources().getString(R.string.error_getting_maps));
            builder.setCancelable(true);
            builder.setPositiveButton("OK", null);
            AlertDialog dialog = builder.create();
            dialog.show();
        } else {
            _map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
            [ETC]
        }
于 2013-09-03T14:32:10.880 に答える