Android DialogFragment находится за родительским фрагментом после поворота - PullRequest
0 голосов
/ 28 апреля 2020

У меня проблема, что 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 , идентификатор контейнера.

Ожидаемый результат: родитель открывает дочернее диалоговое окно, после поворота я вижу то же состояние.

Вопрос: почему я не вижу его после поворота?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...