我刚刚设置了一个带有Android导航组件的项目,下面是我的图表结构:
<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/nav_graph"
app:startDestination="@id/a">
<fragment
android:id="@+id/a"
android:name="com.example.tutorial.fragmentA"
android:label="a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment
android:id="@+id/b"
android:name="com.example.tutorial.fragmentB"
android:label="b">
</fragment>
</navigation>
在片段A中,我导航到片段B,如下所示:
findNavController().navigate(R.id.action_a_to_b)
在片段B中,我有一个自定义工具栏,其思想是单击左上方的箭头应该关闭片段B并恢复片段A:
(activity as AppCompatActivity).setSupportActionBar(binding.toolbar)
binding.toolbar.setNavigationOnClickListener {
findNavController().popBackStack()
}
如果我单击“Key down(向下键)”按钮,也会发生同样的情况:
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner){
findNavController().popBackStack()
}
这个问题我还停留在片段B:退出动画开始和结束,我仍然在片段B。有什么想法如何着手解决这个问题?
3条答案
按热度按时间kqqjbcuj1#
我已经创建了一个小项目与2个片段,它的工作流程。我们有一个登录屏幕和密码屏幕。
登录片段
密码片段
LoginFragment XML中的工具栏
PasswordFragment XML中的工具栏
主要活动XML
我从loginFragment导航到PasswordFragment,然后按向上按钮,转到上一个片段:)
如果有用就告诉我
imzjd6km2#
你能在你的主活动中试试这个设置吗,它对我很有效,我把bottomNav navdrawer和appbar一起使用。
如果要使用自定义工具栏
t5fffqht3#
现在,我们可以使用popBackStack()为第二个片段的返回值创建观察器
假设我们有第一片段和第二片段
在firstFragment中,观察者使用以下代码:-
在secondFragment中使用以下代码