7heViking
7heViking

Reputation: 7587

NavigationFragment does not show content

I have followed a guide on creating android navigation with the androidx navigation package. However, I am having troubles displaying anything. When the app starts it shows and empty activity and not the content of my fragment.

Do you have to do anything extra in order to let it show the start screen of the navigation graph?

Launcher xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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_height="match_parent"
android:layout_width="match_parent">

<fragment
    android:id="@+id/launcherNavHostFragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:navGraph="@navigation/navigation_launcher" />
</FrameLayout>

Navigation graph (navigation_launcher)

<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_launcher"
app:startDestination="@id/launcherFragment">

<fragment
    android:id="@+id/launcherFragment"
    android:name="com.myapp.Views.LauncherFragment"
    android:label="fragment_launcher"
    tools:layout="@layout/fragment_launcher" >
    <action
        android:id="@+id/action_launcherFragment_to_mainActivity"
        app:destination="@id/mainActivity" />
</fragment>
<activity
    android:id="@+id/mainActivity"
    android:name="com.myapp.Views.MainActivity"
    android:label="activity_main"
    tools:layout="@layout/activity_main" />
</navigation>

The fragments are just basic fragments with a text view inside. Nothing special here.

Any ideas on what is missing?

Upvotes: 0

Views: 133

Answers (1)

Nicola Gallazzi
Nicola Gallazzi

Reputation: 8713

As far as I see from the code you posted there are some errors in your configuration:

  1. The nav host fragment should be contained in activity_main.xml (or your main activity layout file, the main activity should be defined in your manifest file and it's the one responsible to load the first fragment displayed by the app
  2. The launcher fragment layout should not contain a NavHostFragment itself, but it should have some views inside the frame layout (a textview displaying some text for example)

- activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@+id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/navigation_launcher" />

</androidx.constraintlayout.widget.ConstraintLayout>

- fragment_launcher.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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_height="match_parent"
android:layout_width="match_parent">

<TextView android:text="I'm the launcher fragment" 
   android:layout_height="wrap_content"
   android:layout_width="wrap_content" />
</FrameLayout>

Upvotes: 1

Related Questions