Skip to main content

Map Fragment

Use a MapView inside a map fragment and fragment backstack.
Android Examples App Available

This example code is part of the Maps SDK for Android Examples App, a working Android project available on GitHub. Android developers are encouraged to run the examples app locally to interact with this example in an emulator and explore other features of the Maps SDK.

See our Run the Maps SDK for Android Examples App tutorial for step-by-step instructions.

FragmentBackStackActivity.kt
package com.mapbox.maps.testapp.examples

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.mapbox.maps.MapboxMap
import com.mapbox.maps.Style
import com.mapbox.maps.testapp.R
import com.mapbox.maps.testapp.databinding.ActivityEmptyFabBinding
import com.mapbox.maps.testapp.examples.fragment.MapFragment

class FragmentBackStackActivity : AppCompatActivity() {

private lateinit var mapFragment: MapFragment

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityEmptyFabBinding.inflate(layoutInflater)
setContentView(binding.root)

if (savedInstanceState == null) {
mapFragment = MapFragment()
mapFragment.getMapAsync {
initMap(it)
}
supportFragmentManager.beginTransaction().apply {
add(R.id.container, mapFragment, FRAGMENT_TAG)
}.commit()
} else {
supportFragmentManager.findFragmentByTag(FRAGMENT_TAG)?.also { fragment ->
if (fragment is MapFragment) {
fragment.getMapAsync {
initMap(it)
}
}
}
}

binding.displayOnSecondDisplayButton.setOnClickListener { handleClick() }
binding.fragmentButton.setOnClickListener { addNewFragment() }
}

private fun addNewFragment() {
supportFragmentManager.beginTransaction().apply {
replace(
R.id.container,
MapFragment().also {
it.getMapAsync { mapboxMap -> initMap(mapboxMap) }
}
)
addToBackStack("map_new_fragment_${System.currentTimeMillis()}")
}.commit()
}

private fun initMap(mapboxMap: MapboxMap) {
mapboxMap.loadStyle(Style.SATELLITE)
}

private fun handleClick() {
supportFragmentManager.beginTransaction().apply {
replace(R.id.container, EmptyFragment.newInstance())
addToBackStack("map_empty_fragment")
}.commit()
}

class EmptyFragment : androidx.fragment.app.Fragment() {

companion object {
fun newInstance(): EmptyFragment {
return EmptyFragment()
}
}

@SuppressLint("SetTextI18n")
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val textView = TextView(inflater.context)
textView.text = "This is an empty Fragment"
return textView
}
}

companion object {
private const val FRAGMENT_TAG = "map_fragment"
}
}
Was this example helpful?