Verwenden Sie zum Platzieren einer Karte in einem ViewPager den FragmentStatePagerAdapter als ViewPager-Adapter und geben Sie das Fragment folgendermaßen zurück.
Der Beispielcode für jeden ist auf [GitHub] verfügbar (https://github.com/hitting1024/MapInPagerViewSample). Der Umriss ist unten dargestellt.
Diese Methode ist am einfachsten, wenn Sie nur Map in ViewPager anzeigen möchten.
Der Beispielcode gibt [SupportMapFragment] zurück (https://developers.google.com/android/reference/com/google/android/gms/maps/SupportMapFragment).
class MapFragmentPagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {
override fun getItem(position: Int): Fragment {
return SupportMapFragment.newInstance()
}
// omitted
}
Es ist eine Methode, um ListView auf jeder Seite von ViewPager anzuzeigen und Map in der selbst erstellten Zelle in ListView anzuzeigen. Für Homebrew-Zellen wird View in FrameLayout definiert und im Konstruktor SupportMapFragment hinzugefügt.
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)
}
}
So definieren Sie ein FrameLayout im Layout jeder Seite von ViewPager und fügen SupportMapFragment hinzu. Verwenden Sie zu diesem Zeitpunkt ** childFragmentManager ** anstelle von 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