无法向 Mainactivity 添加操作,因为它不支持操作

Can't add action to Mainactivity since it does not support actions

我正在开发这个应用程序,我已经创建了登录和注册片段以及一个主要 activity。我想在应用程序启动后首先显示登录片段,但我一直遇到此错误并且应用程序崩溃:

UnsupportedOperationException: Cannot add action 2131362356 to Destination(/mainActivity) label=MainActivity class=MainActivity as it does not support actions, indicating that it is a terminal destination in your navigation graph and will never trigger actions.

这是我的 main.kt

class MainActivity :AppCompatActivity (){

    override fun onCreate(savedInstanceState: Bundle? ) {
  super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main);
supportActionBar?.hide()
val navController = findNavController(this,R.id.nav_host_fragment)
navController.navigate(R.id.loginFragment)

}

还有我的导航文件

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

<fragment
    android:id="@+id/loginFragment"
    android:name="com.exa.activities.login.LoginFragment"
    android:label="login_fragment"
    tools:layout="@layout/login_fragment" >
    <action
        android:id="@+id/action_loginFragment_to_registrationFragment"
        app:destination="@id/registrationFragment" />
</fragment>

<activity
    android:id="@+id/mainActivity"
    android:name="com.exa.MainActivity"
    android:label="MainActivity" >
<action
    android:id="@+id/action_main_to_loginFragment"
    app:destination="@id/loginFragment"
    />
</activity>

我已经尝试了基本操作,例如失效 cache/restarting 和检查应用程序的名称和启动 activity,但没有任何改变。我想首先显示 LoginFragment,然后在用户登录时显示其他屏幕。

来自the docs

Note: The Navigation component is designed for apps that have one main activity with multiple fragment destinations. The main activity is associated with a navigation graph and contains a NavHostFragment that is responsible for swapping destinations as needed. In an app with multiple activity destinations, each activity has its own navigation graph.

这个想法是你有一个 activity,它是一个 NavHost,它充当一个容器。目的地都是 Fragments,并在容器中交换进出以在应用程序中“导航”。由于您试图在导航图中使用 Activity 作为目的地,我假设这是您的问题 - 您的目的地需要是片段(包括您的 startDestination)。

此外,由于您正在执行登录操作,因此有一个关于处理该确切用例的教程:https://developer.android.com/guide/navigation/navigation-conditional

请记住,您的 startDestination 基本上位于后台堆栈的底部,无法弹出 - 这是用户退出应用程序时看到的最后一件事(如果退出应用程序)自动将它们转发到另一个片段,它们将无法退出)。如果您希望登录屏幕是他们看到的第一件事(如果您要通过自动导航到其他地方来处理他们已经登录的情况),请牢记这一点

从您的导航图中删除所有 activity 标签。将 app:startDestination="@id/mainActivity" 更改为 app:startDestination="@id/loginFragment"