Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在当前目标中找不到操作_Android_Kotlin_Android Navigation - Fatal编程技术网

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())