Close Dialog from Activity open in Child Fragment in NavGraph

32 Views Asked by At

I want to close any dialog open from nav_graph on some event.

NavHostActivity.kt xml

         <fragment
            android:id="@+id/fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:defaultNavHost="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:navGraph="@navigation/nav_graph_settings" />

nav_graph_setting.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_graph_settings"
    app:startDestination="@id/settingFragment">

    <fragment
        android:id="@+id/settingFragment"
        android:name="matas.matas.settings.fragment.SettingFragment"
        android:label="Min profil”/>
       
</navigation>

on Click of a button in SettingFragment I call below method

private fun highLightMemberCard(view: View) {
        childFragmentManager.let {
            val dialog = MemberCardDialogFragment.getInstance(DisplayUtils.dpToPx(requireContext(),65))
            val ft = it.beginTransaction()
            ft.add(dialog, MemberCardDialogFragment.TAG)
            ft.commitAllowingStateLoss()
        }
    }

I simply want to close MemberCardDialogFragment from Activity on certain event?

1

There are 1 best solutions below

3
On

Create an interface

interface CallbackFunction{
    fun closeDialog()
}

implement that interface in your main activity

class MainActivity : AppCompatActivity(),CallbackFunction{
    private lateinit var navController: NavController


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

      val navHostFragment = supportFragmentManager
    .findFragmentById(R.id.nav_host_fragment) as NavHostFragment

       navController = navHostFragment.navController

   }
    override fun closeDialog() {
          navController.popBackStack()
    }

}

Call the function in your fragment as

(activity as MainActivity).closeDialog()