Android 在当前目标中找不到操作
我有一个非常简单的导航,当我尝试转到新片段时,会出现以下错误:Android 在当前目标中找不到操作,android,kotlin,android-navigation,Android,Kotlin,Android Navigation,我有一个非常简单的导航,当我尝试转到新片段时,会出现以下错误: java.lang.IllegalArgumentException: Navigation action/destination com.my.app:id/action_settingsFragment_to_profileFragment cannot be found from the current destination Destination(com.my.app:id/mainFragment) label=frag
java.lang.IllegalArgumentException: Navigation action/destination com.my.app:id/action_settingsFragment_to_profileFragment cannot be found from the current destination Destination(com.my.app:id/mainFragment) label=fragment_main class=com.my.app.main.MainFragment
导航
<?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/main_graphs"
app:startDestination="@id/mainFragment">
<fragment
android:id="@+id/mainFragment"
android:name="com.my.app.main.MainFragment"
android:label="fragment_main"
tools:layout="@layout/fragment_main" >
<action
android:id="@+id/action_mainFragment_to_laundriesFragment"
app:destination="@id/laundriesFragment" />
</fragment>
<!-- other fragments here... -->
<fragment
android:id="@+id/settingsFragment"
android:name="com.my.app.main.SettingsFragment"
android:label="fragment_settings"
tools:layout="@layout/fragment_settings" >
<action
android:id="@+id/action_settingsFragment_to_newOrderFragment"
app:destination="@id/newOrderFragment" />
<action
android:id="@+id/action_settingsFragment_to_profileFragment"
app:destination="@id/profileFragment" />
</fragment>
<fragment
android:id="@+id/profileFragment"
android:name="com.my.app.main.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" >
</fragment>
</navigation>
有什么想法吗?
更新
我用下面的代码成功地重定向到profileFragment
,但当我点击“后退”按钮时,它会关闭应用程序,而不是返回到settingsFragment
private fun GenerateItems(){
when (position) {
0 -> {
//
}
1 -> {
this@SettingsFragment.navigateTo(ProfileFragment())
}
2 -> {
//
}
}
}
private fun navigateTo(fragment: Fragment) {
val transaction = (activity as FragmentActivity).supportFragmentManager
.beginTransaction()
.replace(R.id.fragmentFragmentId, fragment)
transaction.commit()
}
对后退按钮问题有什么想法吗?
java.lang.IllegalArgumentException:Navigation action/destination com.my.app:id/action\u settingsFragment\u to\u profileFragment无法从当前目标(com.my.app:id/mainFragment)label=fragment\u main class=com.my.app.main.mainFragment中找到
异常表示您正试图使用名为action\u settings片段\u to_profileFragment
的操作,该操作可在当前目标/片段中找到,即main fragment
private fun GenerateItems(){
when (position) {
0 -> {
//
}
1 -> {
this@SettingsFragment.navigateTo(ProfileFragment())
}
2 -> {
//
}
}
}
private fun navigateTo(fragment: Fragment) {
val transaction = (activity as FragmentActivity).supportFragmentManager
.beginTransaction()
.replace(R.id.fragmentFragmentId, fragment)
transaction.commit()
}
正如操作名称所示,您(这是一个用于从setingsFragment
移动到profileFragment
的操作,因此只能在setingsFragment
中使用此操作…确认在navGraph中:
<fragment
android:id="@+id/settingsFragment"
android:name="com.my.app.main.SettingsFragment"
android:label="fragment_settings"
tools:layout="@layout/fragment_settings" >
<action
android:id="@+id/action_settingsFragment_to_newOrderFragment"
app:destination="@id/newOrderFragment" />
<action
android:id="@+id/action_settingsFragment_to_profileFragment"
app:destination="@id/profileFragment" />
</fragment>
更新:
我用下面的代码成功地重定向到profileFragment
,但当我点击“后退”按钮时,它会关闭应用程序,而不是返回到settingsFragment
private fun GenerateItems(){
when (position) {
0 -> {
//
}
1 -> {
this@SettingsFragment.navigateTo(ProfileFragment())
}
2 -> {
//
}
}
}
private fun navigateTo(fragment: Fragment) {
val transaction = (activity as FragmentActivity).supportFragmentManager
.beginTransaction()
.replace(R.id.fragmentFragmentId, fragment)
transaction.commit()
}
您需要添加app:poputo=“@id/settingsFragment”
,并指定在单击后退按钮或父按钮时要将后堆栈弹出窗口添加到的片段
<fragment
android:id="@+id/settingsFragment"
android:name="com.my.app.main.SettingsFragment"
android:label="fragment_settings"
tools:layout="@layout/fragment_settings" >
<action
android:id="@+id/action_settingsFragment_to_newOrderFragment"
app:destination="@id/newOrderFragment" />
<action
android:id="@+id/action_settingsFragment_to_profileFragment"
app:popUpTo="@id/settingsFragment"
app:destination="@id/profileFragment" />
</fragment>
然后Build>makeproject
生成direction类。在导航中使用生成的类
navController.navigate(SettingsFragmentDirections.actionSettingsFragmentToProfileFragment())
还有更多信息您是否尝试了使用方向的操作?@Eyosiyas您是什么意思?用于传递数据或参数的操作。NavDirections action=SpecifyAmountFragmentDirections.actionSpecifyAmountFragmentToConfirmationFragment();Navigation.findNavController(视图)。navigate(操作);@Eyosiyas不确定我是否理解正确,但我也有类似的内容
override-fun-onViewCreated(view:view,savedInstanceState:Bundle?{super.onViewCreated(view,savedInstanceState)navController=Navigation.findNavController(view)}
那么你的意思是为了我的导航工作,我需要在我的主片段中添加action\u main fragment\u到\u settings fragment
,对吗?是的。如果你想从main fragment到settingFragment。然后使用navController以编程方式在一些action上执行导航,从settings fragment
到MainFragment
不是我的问题,我的问题是ProfileFragment
来自settingsFragment
PS:我刚刚尝试了你的建议,但仍然得到了相同的错误我添加了屏幕截图。你是从settingsFragment类中这样做的吗?
navController.navigate(SettingsFragmentDirections.actionSettingsFragmentToProfileFragment())