Pour placer une carte dans un ViewPager, utilisez le FragmentStatePagerAdapter comme adaptateur ViewPager et renvoyez le fragment de la manière suivante.
L'exemple de code pour chacun est disponible sur GitHub. Le contour est présenté ci-dessous.
Cette méthode est la plus simple si vous souhaitez afficher uniquement la carte dans ViewPager.
L'exemple de code renvoie SupportMapFragment.
class MapFragmentPagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {
override fun getItem(position: Int): Fragment {
return SupportMapFragment.newInstance()
}
// omitted
}
C'est une méthode pour afficher ListView sur chaque page de ViewPager et afficher Map dans la cellule auto-créée dans ListView. Pour les cellules homebrew, View est défini dans FrameLayout et SupportMapFragment y est ajouté dans le constructeur.
class MapListViewAdapter(private val context: Context, private val fragmentManager: FragmentManager) : BaseAdapter() {
private val inflater = LayoutInflater.from(context)
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
// omitted
val mapView = MyMapView(this.context, this.fragmentManager)
val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 500)
mapView.layoutParams = layoutParams
return mapView
}
// omitted
}
class MyMapView(context: Context, fragmentManager: FragmentManager) : FrameLayout(context) {
init {
val inflater = LayoutInflater.from(context)
val layoutView = inflater.inflate(R.layout.view_map, null)
val view = layoutView.mapFrameLayout
val mapFragment = SupportMapFragment.newInstance()
fragmentManager.beginTransaction().add(view.id, mapFragment).commit()
mapFragment.getMapAsync {
// nothing
}
this.addView(layoutView)
}
}
Comment définir un FrameLayout dans la mise en page de chaque page de ViewPager et y ajouter SupportMapFragment. À ce stade, utilisez ** childFragmentManager ** au lieu de fragmentManager.
class MapPagerFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_map_pager, container, false)
val mapView = view.mapView
val mapFragment = SupportMapFragment.newInstance()
this.childFragmentManager.beginTransaction().add(mapView.id, mapFragment).commit()
mapFragment.getMapAsync {
// nothing
}
return view
}
// omitted
}
Recommended Posts