SyHoMadara
SyHoMadara

Reputation: 33

android application will stop when I use navHostFragment in my activity

I want to use navigation bottom menu with using navHostFragment in main activity. But when I run the program ,it stops on setContent in onCreat method MainActivity java code. I try to use bindig class insted setContent directly but nothing changes.

this is MainActivity.java

package com.example.omarket.ui.fragments;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

import com.example.omarket.R;

public class MainActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);   // <--- it stops here, i use debuger to understand it.
    }
}

this is 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize"
    android:id="@+id/container">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_host_bottom"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/navigation_bar_background"
        app:itemIconSize="@dimen/large_icon_size"
        app:itemIconTint="@color/black"
        app:labelVisibilityMode="unlabeled"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottom_navigation_menu" />

    <fragment
        android:id="@+id/nav_host_fragment_activity_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_host_bottom"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/navigation_main_graph" />


</androidx.constraintlayout.widget.ConstraintLayout>

navigation_main_graph.xml in navigation directory:

<?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_main_graph"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/settingFragment"
        android:name="com.example.omarket.ui.fragments.settings.SettingFragment"
        android:label="@string/title_settings"
        tools:layout="@layout/fragment_setting" />
    <fragment
        android:id="@+id/favoriteFragment"
        android:name="com.example.omarket.ui.fragments.favorites.FavoriteFragment"
        android:label="@string/title_favorite"
        tools:layout="@layout/fragment_favorite" />
    <fragment
        android:id="@+id/productsFragment"
        android:name="com.example.omarket.ui.fragments.products.ProductsFragment"
        android:label="@string/title_products"
        tools:layout="@layout/fragment_products" />

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.omarket.ui.fragments.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home"/>

    <fragment
        android:id="@+id/dashboardFragment"
        android:name="com.example.omarket.ui.fragments.dashboard.DashboardFragment"
        android:label="fragment_dashboard"
        tools:layout="@layout/fragment_dashboard" />

</navigation>

errors that I get

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.omarket, PID: 8090
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.omarket/com.example.omarket.ui.fragments.MainActivity}: android.view.InflateException: Binary XML file line #33 in com.example.omarket:layout/activity_main: Binary XML file line #33 in com.example.omarket:layout/activity_main: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        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:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: android.view.InflateException: Binary XML file line #33 in com.example.omarket:layout/activity_main: Binary XML file line #33 in com.example.omarket:layout/activity_main: Error inflating class fragment
     Caused by: android.view.InflateException: Binary XML file line #33 in com.example.omarket:layout/activity_main: Error inflating class fragment
     Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.omarket.ui.fragments.home.HomeFragment: could not find Fragment constructor
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:628)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
        at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483)
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
        at androidx.navigation.NavGraphNavigator.navigate(NavGraphNavigator.java:71)
        at androidx.navigation.NavGraphNavigator.navigate(NavGraphNavigator.java:28)
        at androidx.navigation.NavController.navigate(NavController.java:1066)
        at androidx.navigation.NavController.onGraphCreated(NavController.java:639)
        at androidx.navigation.NavController.setGraph(NavController.java:592)
        at androidx.navigation.NavController.setGraph(NavController.java:557)
        at androidx.navigation.NavController.setGraph(NavController.java:539)
        at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:248)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
        at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
        at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:140)
        at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
        at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
        at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1067)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:699)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
        at com.example.omarket.ui.fragments.MainActivity.onCreate(MainActivity.java:26)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        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:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NoSuchMethodException: com.example.omarket.ui.fragments.home.HomeFragment.<init> []
        at java.lang.Class.getConstructor0(Class.java:2332)
        at java.lang.Class.getConstructor(Class.java:1728)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:613)
            ... 46 more

Befor using navHostFragment , when i use frame layout it works. Is there any solution ?

Upvotes: 0

Views: 196

Answers (1)

SkyTale.world
SkyTale.world

Reputation: 36

It seems that your HomeFragment doesn't have no parameters constructor. If you want to use fragment that requires constructor parameters you need to provide FragmentFactory to navigation component.

Add empty constructor HomeFragment() to HomeFragment, and it should work.

Upvotes: 1

Related Questions