0

I want to get navcontroller in mainActivity but I get error and I tried to change navHost id many times

note: I want to add up button

MainActivity.ts

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navController = this.findNavController(R.id.nav_host_fragment)
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/navigation"/>
</LinearLayout>

I get this error when I run app

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.sphinx.myapplication, PID: 7401
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sphinx.myapplication/com.sphinx.myapplication.MainActivity}: java.lang.IllegalStateException: Activity com.sphinx.myapplication.MainActivity@6011ce2 does not have a NavController set on 2131230995
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3313)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3462)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2049)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:224)
   
Omar khaled
  • 51
  • 3
  • 7

1 Answers1

0
Can you try this 

class MainActivity : AppCompatActivity() {

        private lateinit var navController: NavController

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            initNavController()
        }
   
  private fun initNavController() {
    (supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).also {
        navController = it.navController
    }
}
Anis MARZOUK
  • 266
  • 2
  • 9