Настройте отображение таким образом,
Проверьте, не существует ли оно уже findFragmentById(R.id.map_new)
, а затем загрузите фрагмент, в противном случае используйте уже загруженный.
childFragmentManager?.run {
findFragmentById(R.id.map)?.let {
val mapFragment = childFragmentManager.findFragmentById(R.id.map_new)
if (mapFragment is SupportMapFragment) {
mapFragment.getMapAsync(this@MapFragment)
}
}
}
Редактировать: -
Вот действие по созданию: -
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.act_test)
supportFragmentManager.beginTransaction()
.replace(R.id.fragment, MapFragment.getInstance())
.addToBackStack("MapFragment")
.commit()
btnBlank.setOnClickListener {
val frag = supportFragmentManager.findFragmentById(R.id.fragment)
if(frag !is BlankFragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment, BlankFragment())
.addToBackStack("BlankFragment")
.commit()
}
}
btnMap.setOnClickListener {
supportFragmentManager.popBackStack("MapFragment", 0)
}
}
И MapFragment: -
class MapFragment : Fragment(), OnMapReadyCallback {
private lateinit var map: GoogleMap
companion object {
private val INSTANCE = MapFragment()
fun getInstance() = INSTANCE
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater.inflate(R.layout.fragment_map, container, false)
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
childFragmentManager.run {
findFragmentById(R.id.map)?.let {
val mapFragment = childFragmentManager.findFragmentById(R.id.map)
if (mapFragment is SupportMapFragment) {
mapFragment.getMapAsync(this@MapFragment)
}
}
}
}
override fun onMapReady(p0: GoogleMap?) {
p0?.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(
p0.cameraPosition.target.latitude,
p0.cameraPosition.target.longitude
), 14f))
}
}