У меня проблема, что DialogFragment «появляется» за родительским фрагментом после поворота. После отладки я вижу, что родительский onStart вызывается первым.
Как мне показать родителя (у меня есть фрагмент контейнера, и он добавляет новые):
private fun showChangeNetworkDialog() {
val fragment = ChangeNetworkDialog.newInstance()
childFragmentManager.beginTransaction()
.add(R.id.container, fragment, ChangeNetworkDialog.tag)
.addToBackStack(null)
.commit()
}
Родительский onViewCreated:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val binding = ChangeNetworkDialogBinding.inflate(layoutInflater)
binding.viewModel = viewModel
binding.lifecycleOwner = viewLifecycleOwner
val builder = AlertDialog.Builder(requireActivity())
builder.setView(binding.root)
builder.setCancelable(false)
dialog = builder.create()
val callback = parentFragment as ChangeNetworkDialogCallback
//......etc
}
Родительский фрагмент - это фрагмент, содержащий AlertDialog, который показывает вызовы в onStart ():
override fun onStart() {
super.onStart()
dialog.show()
}
Вот так я показываю DialogFragment (это одиночное событие, а не mutableLiveData):
viewModel.showWiFiListEvent.observe(viewLifecycleOwner, Observer {
val dialog = WiFiListDialog.newInstance()
dialog.show(childFragmentManager, WiFiListDialog.tag)
})
Кроме того, это работает, если я вызываю dialog.show () в onViewCreated, но это не исправление, его следует вызывать из onStart ().
Я попытался поиграться с транзакцией - addToBackStack , идентификатор контейнера.
Ожидаемый результат: родитель открывает дочернее диалоговое окно, после поворота я вижу то же состояние.
Вопрос: почему я не вижу его после поворота?