#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 не для данных, а для других целей. Однако ваша идея должна сработать. Спасибо