Navigation 如何打开新的页面 并关闭本身
Closed this issue · 12 comments
例如:登录页面 LoginFragment 登录成功以后,打开MainFragment 并且关闭 LoginFragment
-
本 demo 用的是 Navigation 进行的导航,界面之间相互跳转需要掌握:返回堆栈之间的跳转,包含以下常用方法:
//代码中可以选择下面的方法: findNavController().navigate(int resId) NavController.navigateUp() NavController.popBackStack() //布局中可以选择下面的属性: <action ..... app:popUpTo="@+id/a" app:popUpToInclusive="true"/>
-
例如:登录页面 LoginFragment 登录成功以后,打开MainFragment 并且关闭 LoginFragment
可以在具体点说下什么场景吗?你说的场景用上面的方法,应该都可以实现
场景的话,比如一个需要先登录后使用的App, AFragment 启动 BFragment 必须还要关闭AFragment,这是堆栈就生一个BFragment的。
另外还有一个问题:一个Fragment启动自己本身 为啥没反应,启动失败
<fragment
android:id="@+id/testFragment"
android:name="com.test.testFragment"
android:label="TestFragment"
tools:layout="@layout/fragment_test"
>
<action
android:id="@+id/action_testFragment_self"
app:destination="@id/testFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
navigation如果当前fragment是最后一个fragment,那么就不支持结束这个fragment
findNavController().navigate(
R.id.action_splashFragment_to_mainFragment,
bundleOf(MainFragment.usernameKey to "Alex Gladkov"),
navOptions {
popUpTo(R.id.nav_graph_application) {
inclusive = true
}
}
可以实现
ok
另外还有一个问题:一个Fragment启动自己本身 为啥没反应,启动失败 。这个事情。作者有遇到过吗?
另外还有一个问题:一个Fragment启动自己本身 为啥没反应,启动失败 。这个事情。作者有遇到过吗?
这种场景没有试过,为什么会有这个场景呢?是想刷新当前 Fragment
吗?如果想刷新当前 Fragment
的话,本 demo中遇到过:比如在 UserFragment
中退出登录后,要刷新界面,需要在 onCreateView()
中新增 binding.lifecycleOwner = this
方法,代码如下:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentUserBinding.inflate(inflater, container, false)
//设置lifecycleOwner后屏幕才刷新,eg:退出登录时
binding.lifecycleOwner = this
binding.userModel = viewModel
subscribeUi()
return binding.root
}
这场景很常见啊!比如列表ListFragment 里面的item点击,下一个页面还是ListFragment
这种情况只需要刷新数据就行了吧,还需要在启动自己吗?
1.点击的时候,需要一个启动动画。2.点击返回,需要退出动画并回到上一个ListFragment页面
已解决
已解决