无法向 Mainactivity 添加操作,因为它不支持操作
Posted
技术标签:
【中文标题】无法向 Mainactivity 添加操作,因为它不支持操作【英文标题】:Can't add action to Mainactivity since it does not support actions 【发布时间】:2021-12-26 21:01:54 【问题描述】:我正在开发这个应用程序,我已经创建了登录和注册片段以及一个主要活动。我想在应用程序启动后首先显示登录片段,但我一直有这个错误并且应用程序崩溃:
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>
我已经尝试了一些基础知识,例如失效缓存/重新启动以及检查应用程序的名称和启动活动,但没有任何改变。我想首先显示 LoginFragment,然后在用户登录时显示其他屏幕。
【问题讨论】:
【参考方案1】:从导航图中删除所有活动标签。将 app:startDestination="@id/mainActivity" 更改为 app:startDestination="@id/loginFragment"
【讨论】:
【参考方案2】:来自the docs:
注意:导航组件专为具有一个主要活动和多个片段目的地的应用而设计。主要活动与导航图相关联,并包含一个 NavHostFragment,负责根据需要交换目的地。在具有多个活动目的地的应用中,每个活动都有自己的导航图。
这个想法是你有一个NavHost
的活动,它充当一个容器。目的地都是Fragment
s,并被换入和换出容器以“导航”通过应用程序。由于您尝试使用 Activity
作为导航图中的目的地,我假设这是您的问题 - 您的目的地需要是片段(包括您的 startDestination
)。
此外,由于您正在执行登录操作,因此有一个关于处理该确切用例的教程:https://developer.android.com/guide/navigation/navigation-conditional
请记住,您的startDestination
基本上位于后台堆栈的底部,并且无法弹出 - 这是用户退出应用程序时看到的最后一件事(如果它自动将它们转发到另一个片段,他们将无法退出)。如果您希望登录屏幕成为他们看到的第一件事,请记住一些事情(如果您要通过自动导航到其他地方来处理他们已经登录的情况)
【讨论】:
非常感谢!我对整个事情感到非常困惑,而在 MVVM 中完成则更加令人困惑。以上是关于无法向 Mainactivity 添加操作,因为它不支持操作的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在android中的空MainActivity中添加一个按钮?
SimpleCursorAdapter无法在MainActivity中使用