java.lang.RuntimeException:无法使用二进制 XML 文件启动活动 ComponentInfo

问题描述 投票:0回答:1

首先让我为我的英语道歉,它很糟糕所以会有错误 然后我知道这个错误在论坛上出现了数百万次,但请帮助我找到我错过的内容。我正在尝试做简单的面向选项卡的应用程序,我没有太多(错误除外) 非常感谢你

Logcat 说道:

Process: com.ct07.ttn, PID: 8135
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ct07.ttn/com.ct07.ttn.MainActivity}: android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class androidx.fragment.app.FragmentContainerView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2958)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3093)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6825)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
Caused by: android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment NavHostFragment: make sure class name exists
    at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:97)
    at androidx.fragment.app.Fragment.instantiate(Fragment.java:670)
    at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
    at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:525)
    at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.kt:153)
    at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:53)
    at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:136)
    at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:247)
    at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:226)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:780)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at com.ct07.ttn.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:56)
    at com.ct07.ttn.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:50)
    at com.ct07.ttn.MainActivity.onCreate(MainActivity.kt:19)
    at android.app.Activity.performCreate(Activity.java:7144)
    at android.app.Activity.performCreate(Activity.java:7135)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2938)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3093)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
2024-05-09 20:08:00.475  8135-8135  AndroidRuntime          com.ct07.ttn                            at android.app.ActivityThread.main(ActivityThread.java:6825)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
Caused by: java.lang.ClassNotFoundException: NavHostFragment
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:453)
    at androidx.fragment.app.FragmentFactory.loadClass(FragmentFactory.java:53)
    at androidx.fragment.app.FragmentFactory.loadFragmentClass(FragmentFactory.java:94)
    ... 34 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "NavHostFragment" on path: DexPathList[[zip file "/data/app/com.ct07.ttn-B923InpDx0Na9058GAIYtA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ct07.ttn-B923InpDx0Na9058GAIYtA==/lib/x86_64, /system/lib64, /system/vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 38 more
  1. 这是我的主要活动
package com.ct07.ttn

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.setupWithNavController
import com.ct07.ttn.databinding.ActivityMainBinding
import com.ct07.ttn.repository.RoomRepository
import com.ct07.ttn.viewmodel.HomeViewModel
import com.ct07.ttn.viewmodel.HomeViewModelProviderFactory

class MainActivity : AppCompatActivity() {

    lateinit var homeViewModel: HomeViewModel
    lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val roomRepository = RoomRepository()
        val viewModelProviderFactory = HomeViewModelProviderFactory(application, roomRepository)
        homeViewModel = ViewModelProvider(this, viewModelProviderFactory).get(HomeViewModel::class.java)

        val navHostFragment = supportFragmentManager.findFragmentById(R.id.homeNavHostFragment) as NavHostFragment
        val navController = navHostFragment.navController
        binding.bottomNavigationView.setupWithNavController(navController)
    }
}
  1. 这是我的acitivity_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"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/flFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/homeNavHostFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/room_nav_graph" />

    </FrameLayout>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        app:menu="@menu/bottom_navigation_menu"
        app:itemTextColor="@color/white"
        app:itemIconTint="@color/white"
        android:background="@color/purple_500"
        app:itemActiveIndicatorStyle="@style/App.Custom.Indicator"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 这是我的 room_nav_graph.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/room_nav_graph"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.ct07.ttn.fragments.HomeFragment"
        android:label="HomeFragment" >
        <action
            android:id="@+id/action_homeFragment_to_roomFragment"
            app:destination="@id/roomFragment" />
    </fragment>
    <fragment
        android:id="@+id/favoriteFragment"
        android:name="com.ct07.ttn.fragments.FavoriteFragment"
        android:label="FavoriteFragment" >
        <action
            android:id="@+id/action_favoriteFragment_to_roomFragment"
            app:destination="@id/roomFragment" />
    </fragment>
    <fragment
        android:id="@+id/roomFragment"
        android:name="com.ct07.ttn.fragments.RoomFragment"
        android:label="RoomFragment" >
        <argument
            android:name="room"
            app:argType="com.ct07.ttn.models.Room"
            app:nullable="true" />
    </fragment>
</navigation>

我尝试了很多并观看论坛,但我找不到我的问题

android kotlin
1个回答
0
投票
Caused by: java.lang.IllegalArgumentException: com.ct07.ttn.models.Room is not Serializable or Parcelable

用于导航参数的自定义类需要实现

Parcelable
Serializable
接口。请参阅文档了解导航参数的有效类型。

© www.soinside.com 2019 - 2024. All rights reserved.