バックグラウンド
新しいマップAPIv2.0をViewPagerに正常に追加しましたが、マップは正常に読み込まれます。FragmentViewPagerを使用しています。ただし、使用しているViewPagerは互換性ライブラリからXMLで定義されているため、タグごとのフラグメントを取得できないため、マーカーを追加しようとすると問題が発生します。これにより、タグが「非表示」になります。
質問
を使用するSupportMapFragment
に、マーカー付きの新しいMapv2をロードするにはどうすればよいですか。ViewPager
FragmentPagerAdapter
私の試み
ですから、私は、SupportMapFragmentを次のことを行う新しいクラスに拡張することで、洗練されたソリューションを作成できると思いました。
GoogleMapOptions
とをとる新しいコンストラクターを追加しますList<MarkerOptions>
。GoogleMapsOptions
これにより、マーカーのリストを取得して新しいクラスのプライベートプロパティ内に格納する既存のコンストラクターが効果的に呼び出されます。- オーバーライド-null
GetMap()
であるかどうか、および以前にマップにロードしたマップにマーカーが追加されていないかどうかを確認し、最後にそれを返します。
私の考えでは、私の拡張機能は再利用性が高く、1つの場所に関連するすべてのマップを抽象化し、アクティビティで新しいMapFragmentを作成できるようになりますnewInstance(myGoogleMapOptions, myMarkers)
。
さて、問題です。パート1は正常に機能しているようですが、デバッグ中に、オーバーライドされたGetMap()メソッドを呼び出すことができません。実際、フラグメントが持つ通常のメソッドのほとんどをオーバーライドしようとしましたが、いずれも呼び出されません。SupportMapFragmemtで何か奇妙なことが起こっていますか?私はそれのソースを見つけようとしましたが、自分でチェックすることはできませんでした。
アップデート
オーバーライドされたメソッドが呼び出されなかった理由に気づきました。それは私がではSupportMapFragment
なく標準を返していたからですMyMapFragment
。つまり、静的メソッドからsuperを呼び出すことはできず、例外なく基本クラスから派生クラスにキャストすることはできません。
編集 ここにクラスがあります
public class MyMapFragment extends SupportMapFragment {
private static List<MarkerOptions> mMarkers;
public static SupportMapFragment newInstance(GoogleMapOptions options, List<MarkerOptions> markers)
{
SupportMapFragment fragment = newInstance(options);
mMarkers = markers;
return fragment;
}
//have tried Overriding several methods including getMap()...
@Override
public void onResume ()
{
GoogleMap mMap = super.getMap();
//add the markers
if(mMap != null)
{
for(MarkerOptions marker : mMarkers)
{
mMap.addMarker(marker);
}
}
}
}