5
ヌル

を返す私のonCreateView()メソッドです:SupportMapFragment.getmapは、()ここでは、私はフラグメントに動的にSupportMapFragmentをロードしようとしている

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      View contentView = inflater.inflate(R.layout.frag_map_layout, null); 
      shopDtos=ShopListFragment.shopDtos; 
      fragment =SupportMapFragment.newInstance(); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.map_content, fragment); 
      ft.commit(); 
      map = fragment.getMap(); 
      mapMarker = map.addMarker(new MarkerOptions().position(new LatLng(0, 0)) 
        .icon(BitmapDescriptorFactory 
          .fromResource(R.drawable.maps_pin))); 
     return contentView; 
    } 

は、残念ながら、私はnullとしてGoogleマップのマップを取得します。 マップフラグメントを動的に作成する方法についてのご意見はありますか?

+0

ログを確認します。ほとんどの場合、Google Play APIを有効にしていない可能性があります。 – PravinCG

+0

いいえ..もし私たちが直接frmlをxmlファイルに追加すると...しかし....問題は... frgment.getmap()はnullを返します。そうすれば、マーカをマップに追加することはできません – ranjith

+0

[Maps API v2を使用してプログラムでMapFragmentを初期化する]を複製したものです(http://stackoverflow.com/questions/13733299/initialize-mapfragment-programmatically-with-maps-api-v2) –

答えて

13

マップをロードするために、いくつかの時間がかかりますので、あなたは、ハンドラでコードを実行する必要がある - >

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() 

    @Override 
    public void run() { 
     GoogleMap googleMap = SupportMapFragment.newInstance(new GoogleMapOptions().zOrderOnTop(true)).getMap(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.replace(R.id.map_content, fragment); 
     ft.commit(); 
     if(googleMap != null) { 
      googleMap.addMarker(new MarkerOptions().position(result)).setVisible(true); 

      // Move the camera instantly to location with a zoom of 15. 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(result, 15)); 

      // Zoom in, animating the camera. 
      googleMap.animateCamera(CameraUpdateFactory.zoomTo(14), 2000, null); 

      googleMap.getUiSettings().setZoomControlsEnabled(false); 
      googleMap.getUiSettings().setCompassEnabled(false); 
      googleMap.getUiSettings().setMyLocationButtonEnabled(false); 

      handler.removeCallbacksAndMessages(null); 
     } 

     else { 
      handler.postDelayed(this, 500); 
     } 
}, 500); 
+0

地図はロードされていますが、 tマップにマーカーを追加する – ranjith

+0

今もnullで私のgooglemapオブジェクトを取得します.... – ranjith

+0

マーカーに 'setVisible(true)'を設定しましたか? –

3

ただ、次のコードを使用してみてください。それは私のために働いた。同じトピックの周りに行くの重複質問の束があります

public class MapFragment extends SupportMapFragment { 

    GoogleMap mapView; 
    private Context context; 

    @Override 
    public void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater mInflater, ViewGroup arg1, 
     Bundle arg2) { 
     View view = super.onCreateView(mInflater, arg1, arg2); 

     return view; 
    } 

    @Override 
    public void onInflate(Activity arg0, AttributeSet arg1, Bundle arg2) { 
     super.onInflate(arg0, arg1, arg2); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     context = getActivity(); 
     mapView = getMap(); 
    } 
} 
2

は...私は...どのようにフラグを立て、その上に1つの答えを入れ、その後重複としてと把握することができないよう

はここで他の1へのリンクです:Android SupportMapFragment.getMap() returns null

と潜在的な答えはそこにも投稿:

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

名前は次のようになります。 アンドロイド:名=「com.google.android.gms.maps.SupportMapFragment」

+0

これは私の本当の問題でした!どうもありがとう。! –

1

、Googleのプレイサービスがまだ更新/インストールされていないとそれは一度新しい購入したデバイスでは私と一緒に起こりました。言及された他のノートと一緒に、もちろんこれも考慮してください。

0
getChildFragmentManager().findFragmentById(R.id.map) 

フラグメントでgetChildFragmentManager()を試してください。

関連する問題