Как создать диалоговое окно во фрагменте действия с помощью компонента навигации

#android #kotlin

Вопрос:

Я хочу создать диалоговое окно во фрагменте непосредственно из действия, используя компонент навигации.

Единственное решение, которое я нашел, — это ниже.

У кого-нибудь есть лучшее решение?

В Деятельности:

 private lateinit var navHostFragment: NavHostFragment
private lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_content_main) as NavHostFragment
    navController = navHostFragment.navController
}

private fun openDialogAbout() {

    val finestraDialogo = Dialog(navHostFragment.requireContext())
    finestraDialogo.window
    finestraDialogo.requestWindowFeature(Window.FEATURE_NO_TITLE)
    finestraDialogo.setContentView(R.layout.dialog_about)
    finestraDialogo.setCancelable(true)
    finestraDialogo.show()

    val window: Window? = finestraDialogo.window
    window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

}
 

Ответ №1:

Вы можете вызвать его из Фрагмента с некоторыми изменениями.

 private fun openDialogAbout() {

    val finestraDialogo = Dialog(requireActivity())
    finestraDialogo.window
    finestraDialogo.requestWindowFeature(Window.FEATURE_NO_TITLE)
    finestraDialogo.setContentView(R.layout.dialog_about)
    finestraDialogo.setCancelable(true)
    finestraDialogo.show()

    val window: Window? = finestraDialogo.window
    window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

}
 

Комментарии:

1. Ваш ответ бесполезен. Я хочу создать диалог во фрагменте непосредственно из действия.

2. В этом случае вы можете использовать общую модель представления и текущие данные. Вы можете подписаться на объект живых данных в действии и добавить значение в эти живые данные во время любого события из фрагмента. Поскольку вы подписываетесь на текущие данные об активности, следовательно, вы можете показывать свой диалог.

3. Рабиун, это может быть решением, хотя мне не очень нравится использовать ViewModels не для данных, а для других целей. Однако ваша идея должна сработать. Спасибо