Функции выполняются 2 раза подряд
Возникла проблема: написал новый класс, при переходе на фрагмент, функции выполняются 2 раза. В том числе 2 раза выполняется onViewCreated. В чем может быть проблема? То что выполняется 2 раза проверил в логах и выводя println. Ниже код onViewCreated:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initRecycler()
onMapping()
startSoundNotification()
println("onViewC")
}
Пример функции, которая выполняется 2 раза:
override fun onMapping() {
var bundle = this.arguments
var urlLast = bundle?.getString("name")
if (bundle?.getString("name") != null) {
urlLast = bundle?.getString("name")!!
}
println("onMapp")
println("Зашел в субмит:")
webView.settings.javaScriptEnabled = true
webView.settings.userAgentString =
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
webView.webChromeClient = object : WebChromeClient() {
override fun onGeolocationPermissionsShowPrompt(
origin: String,
callback: GeolocationPermissions.Callback
) {
callback.invoke(origin, true, false)
}
}
webView.loadUrl(urlLast)
println("Тест = $urlLast")
webView.webViewClient = MyWebViewClient()
}
Вызываю фрагмент отсюда:
override fun setRoute(list: List<TaskRouteItem>) {
for (route in list.withIndex()) {
when (route.index) {
0 -> {
lineUp.visibility = GONE
lineDown.visibility = VISIBLE
divider.visibility = VISIBLE
}
in 1..list.size - 2 -> {
lineUp.visibility = VISIBLE
lineDown.visibility = VISIBLE
divider.visibility = VISIBLE
}
list.size - 1 -> {
lineUp.visibility = VISIBLE
lineDown.visibility = GONE
address.updatePadding(bottom = dpToPx(13))
divider.visibility = GONE
}
}
var fusedLocationClient: FusedLocationProviderClient =
context?.let { LocationServices.getFusedLocationProviderClient(it) }!!
fusedLocationClient.lastLocation
.addOnSuccessListener { location: Location? ->
var latitudeF = location?.latitude
var longitudeF = location?.longitude
}
arrow.setOnClickListener {
val i = Bundle()
i.putString("name", "${route.value.latitude}, ${route.value.longitude}")
val frag = MapTaskFragment()
frag.setArguments(i)
val fragmentManager: FragmentManager? = fragmentManager
fragmentManager?.beginTransaction()?.replace(
R.id.fmContent
, frag
)?.commit()
presenter.onMapTaskClick()
}
address.text = route.value.address
llRouteContainer.addView(view)
}
}
Ответы (1 шт):
Автор решения: Sergei Buvaka
→ Ссылка
У вас метод открытия фрагмента находится в цикле:
for (route in list.withIndex())
Соответственно если в цикле более одного элемента, то вызов фрагмента будет вызываться на каждой итерации.