无法向 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
,它充当一个容器。目的地都是 Fragment
s,并在容器中交换进出以在应用程序中“导航”。由于您试图在导航图中使用 Activity
作为目的地,我假设这是您的问题 - 您的目的地需要是片段(包括您的 startDestination
)。
此外,由于您正在执行登录操作,因此有一个关于处理该确切用例的教程:https://developer.android.com/guide/navigation/navigation-conditional
请记住,您的 startDestination
基本上位于后台堆栈的底部,无法弹出 - 这是用户退出应用程序时看到的最后一件事(如果退出应用程序)自动将它们转发到另一个片段,它们将无法退出)。如果您希望登录屏幕是他们看到的第一件事(如果您要通过自动导航到其他地方来处理他们已经登录的情况),请牢记这一点
从您的导航图中删除所有 activity 标签。将 app:startDestination="@id/mainActivity" 更改为 app:startDestination="@id/loginFragment"
我正在开发这个应用程序,我已经创建了登录和注册片段以及一个主要 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
,它充当一个容器。目的地都是 Fragment
s,并在容器中交换进出以在应用程序中“导航”。由于您试图在导航图中使用 Activity
作为目的地,我假设这是您的问题 - 您的目的地需要是片段(包括您的 startDestination
)。
此外,由于您正在执行登录操作,因此有一个关于处理该确切用例的教程:https://developer.android.com/guide/navigation/navigation-conditional
请记住,您的 startDestination
基本上位于后台堆栈的底部,无法弹出 - 这是用户退出应用程序时看到的最后一件事(如果退出应用程序)自动将它们转发到另一个片段,它们将无法退出)。如果您希望登录屏幕是他们看到的第一件事(如果您要通过自动导航到其他地方来处理他们已经登录的情况),请牢记这一点
从您的导航图中删除所有 activity 标签。将 app:startDestination="@id/mainActivity" 更改为 app:startDestination="@id/loginFragment"