2013-04-14 15 views
16

私が構築しようとしているアクティビティに小さなMapFragmentをまとめようとしていますが、それをすべて動作させるのに問題があります。私はテストのチュートリアルをやったので地図apiとPlayサービスが正しくインストールされていることを知っています。SupportMapFragment - フラグメントからMapFragmentにキャストできません

ドキュメントhereに続いて、私は次の問題に取り組んでいます。私のsetUpMapIfNeededメソッドでは、getFragmentManager()またはgetSupportFragmentManager()のいずれかを使用できます。 getFragmentManager()を使用すると、Eclipseはうまくいっていますが、実行すると、メソッドが定義されていないことを示すNoSuchMethodErrorが表示されます。 getSupportFragmentManager()を選択すると、Eclipseはそれを気に入らず、「フラグメントからMapFragmentにキャストできません」というエラーを表示します。だから何が問題なの?助言がありますか?

private void setUpMapIfNeeded() { 
    //Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) { 
     mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
     if (mMap != null) { 
      //do things to the map 
      mMap.addMarker(new MarkerOptions().position(LOCATION).title(EXTRA_URL)); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LOCATION,15)); 
      mMap.getUiSettings().setZoomControlsEnabled(false); 
     } 
    } 
} 

私が提供できる他のコードがあれば教えてください。私はすぐに投稿することができます。

+0

R.id.mapにclass属性がありますか? 'class =" com.google.android.gms.maps.MapFragment "' –

答えて

77

getFragmentManager()またはgetSupportFragmentManager()のいずれかを使用できます。

ここで議論する必要はありません。 getSupportFragmentManager()が利用可能な場合は、Androidサポートパッケージのフラグメントのバックポートを使用しています。これは、使用する必要がある方法です。

私がgetSupportFragmentManager()を選択すると、Eclipseはそれを気に入らず、「フラグメントからMapFragmentにキャストできません」というエラーを表示します。

MapFragmentを使用しないでください。 Androidサポートパッケージのフラグメントのバックポートを使用しているため、SupportMapFragmentを使用する必要があります。

+0

私は今、本当に馬鹿だと感じます。私は間違いなくそれを認識していましたが、明らかにそれらをすべてSupportMapFragmentに変更していませんでした。私はMapFragmentをインポートしていましたが、SupportMapFragmentはインポートしていませんでした。ありがとう!私の問題を解決しました。 – user2163853

+0

@ user2163853また、ここで愚かな間違いのために落ちた! –

+2

時には愚かな間違いは、他人(おそらく初心者)がコンセプトを理解するのを助け、あまりにも愚かに感じることはありません。 – marienke

0

これはレベル11の下で働いていたため、これは私がしなければならなかったことです。

import com.google.android.gms.maps.GoogleMap; 
    import com.google.android.gms.maps.SupportMapFragment; 
    import android.support.v4.app.FragmentActivity; 

    public class MapaActivity extends FragmentActivity { 

    private GoogleMap map; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mapa); 

     map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap(); 
    } 
} 
0

ちょっと単にあなたのlibsフォルダにv4のjarを追加して、ちょうど

輸入android.support.v4.app.FragmentActivityをインポートあなたのフラグメントのページで、その後 を構築するために追加します。

あなたがすることができるかもしれないFragmentActivity

パブリッククラスMainActivityがFragmentActivityはLocationListener {

}

を実装し、それはまたgetSupportFragmentManager()をアクセス延びて延びています。

SupportMapFragment fm =(SupportMapFragment)getSupportFragmentManager()。findFragmentById(R.id.map);

関連する問題