まず第一に、あなたのソリューションを共有してくれてありがとう@Rich - それは私が探していたものでした. SupportMapfragment を拡張するフラグメントがそのアイテムの 1 つである View Pager があります。私のソリューションでは、フラグメントにいくつかの追加のボタンを追加する必要があったため、カスタム XML レイアウト ファイルがあります。これが私の解決策です:
public class MapFragmentScrollOverrideViewPager extends ViewPager {
public MapFragmentScrollOverrideViewPager(Context context) {
super(context);
}
public MapFragmentScrollOverrideViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if(v instanceof MapHoldingRelativeLayout) {
return true;
}
return super.canScroll(v, checkV, dx, x, y);
} }
public class MapHoldingRelativeLayout extends RelativeLayout {
public MapHoldingRelativeLayout(Context context) {
super(context);
}
public MapHoldingRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MapHoldingRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} }
フラグメント レイアウト ファイル:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/switchNearbyOffersButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="XXXX"
/>
<xxx.view.MapHoldingRelativeLayout
android:id="@+id/mapLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/switchNearbyOffersButton"
/>
</RelativeLayout>
フラグメント自体:
public final class NearbyOffersFragment extends SupportMapFragment {
public static NearbyOffersFragment newInstance(String content) {
NearbyOffersFragment fragment = new NearbyOffersFragment();
return fragment;
}
private GoogleMap googleMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
if (googleMap == null) {
googleMap = getMap();
if (googleMap != null) {
setUpMap();
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_nearby_offers,
container, false);
final View mapFragmentLayout = super.onCreateView(inflater, container,
savedInstanceState);
MapHoldingRelativeLayout mapLayout = (MapHoldingRelativeLayout) rootView
.findViewById(R.id.mapLayout);
mapLayout.addView(mapFragmentLayout);
return rootView;
}
@Override
public void onResume() {
super.onResume();
setUpMapIfNeeded();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
private void setUpMap() {
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.getUiSettings().setZoomControlsEnabled(true);
googleMap.getUiSettings().setAllGesturesEnabled(true);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(41.474856, -88.056928))
.zoom(14.5f)
.build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
}
元の SupportMapFragment のレイアウトはカスタム RelativeLyout 内にあるため、instanceof 演算子を使用でき、maps.jb クラスを直接参照することはできません...