当前位置: 首页 > 知识库问答 >
问题:

导航不再工作,错误:忽略目标的popBackStack,因为它在当前后堆栈中找不到

连晟
2023-03-14

突然,我的应用程序中的导航不知从哪里开始就不起作用了(它昨天确实起作用了)。

下面是一个示例:当我从UserLoggedIntragment导航到userLoggedOutFragment时,使用参数app:poputo=“@id/userLoggedOutFragment”app:popuptinclusive==“true”,然后单击后退按钮,即使我使用了poputo,它仍然会将我导航回UserLoggedIntragment。然后我得到信息:

I/NavController: Ignoring popBackStack to destination com.example.app:id/userLoggedOutFragment as it was not found on the current back stack

这是我的片段代码

@AndroidEntryPoint
class UserLoggedInFragment : Fragment() {
    private var _binding: FragmentUserLoggedInBinding? = null
    private val binding: FragmentUserLoggedInBinding get() = _binding!!
    private val viewModel: LogoutViewModel by viewModels()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentUserLoggedInBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.lifecycleOwner = viewLifecycleOwner

        binding.btnLogout.btnNext.setOnClickListener { 
          findNavController().navigate(
                UserLoggedInFragmentDirections.actionUserLoggedInFragmentToUserLoggedOutFragment()
            ) 
        }
    }
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}
<fragment
    android:id="@+id/userLoggedInFragment"
    android:name="com.example.app.framework.ui.view.fragment.user.UserLoggedInFragment"
    tools:layout="@layout/fragment_user_logged_in">

    <action
        android:id="@+id/action_userLoggedInFragment_to_userLoggedOutFragment"
        app:destination="@id/userLoggedOutFragment"
        app:popUpTo="@id/userLoggedOutFragment"
        app:popUpToInclusive="true" />
</fragment>

我在许多其他片段中也有这个,我使用popUpTo和popUpToIncluse="true"。我做错了什么??

共有1个答案

欧阳昊阳
2023-03-14

我找到了解决方案:问题是我不应该弹出到我导航到的同一个目的地,因为片段永远不会在背包中。相反,当单击后退按钮时,您应该弹出到您想要呈现的片段。在我的例子中,这将是我的开始目的地,又名。家庭片段:

<action
    android:id="@+id/action_userLogInRegistrationFragment_to_userLoggedInFragment"
    app:destination="@id/userLoggedInFragment"
    app:popUpTo="@id/homeFragment" />
 类似资料:
  • 我最近更新了我的自制Python 3.8安装。2至3.8。3.做完后,我跑了 以检查是否有任何更新。它更新了我从20.0安装的。2至20.1。1,并且自从我运行该命令以来,在我尝试使用它的任何时候都会抛出一个错误。以下是错误: 升级过程中似乎出现了一些问题,未能更改代码中的版本检查。我看到了类似的问题,但公认的答案对我来说并不适用。如何使再次可用?

  • 我需要一些关于react原生应用程序的社区建议。我是一个全新的人,不理解其中的一些基本区别。 关于反应本地文档创建StackNavigator的示例建议如下:从“反应导航堆栈”导入{createStackNav导航仪}; 我发现很多人使用下面的样式导入{堆栈导航器,Tab导航器}从“反应导航”; 为什么人们使用以上两种不同的风格?哪一个更合适,为什么? react-navigation-stack

  • 我的导航有问题。这是我的导航码。 我创建了三个堆栈,如AppStack、StartStack和AuthStack。这些是在createAppContainer()函数中使用的,希望访问这些 this.props.navigation.navigate('App') ... 我可以访问 this.props.navigation.navigate(开始) 和 this.props.navigatio

  • 我正在使用此代码来清理我的背包到我的主视图: 我很确定这段代码以前是有效的,但现在backstack计数没有改变,没有片段被删除,这会导致内存不足异常,因为while循环一直在运行。 有人知道它是否有问题,或者最新版本的SDK工具中是否有bug吗。我不知道是什么导致了这个问题。

  • 我创建了一个简单的演示项目来测试Android Jetpack导航组件的默认后台功能<我有一个主要活动和两个片段。应用程序运行时会显示主片段。主片段有一个按钮。点击导航到另一个片段<但是每当我按下“系统后退”按钮时,我的整个应用程序就完成了,而不是通常的后堆栈行为,我应该看到主片段<感谢您的帮助。提前谢谢 代码如下: main活动。千吨 活动_main。xml(主要活动的布局) HomeFragm

  • 我在通过MapStruct映射字段时遇到问题。 我有两门课。第一个域类“事件”,例如带有字段 第二类是“EventForm”。EventForm具有字段: 当我想更新现有事件时,会发生以下情况:1)我通过Id从数据库中获取现有事件 <代码>事件事件=事件服务。获取(id) 事件id=10000,lastUpdate=11213123123; 2) 我正在将字段从表单映射到域类 <代码>事件=映射器