我正在使用具有 2 页的 ViewPager。ViewPager 的第一页是 MainFragment。MainFragment 有 ViewPager 作为bottomNavigationView。每个页面都有一个FragmentContainerView,默认情况下它们分别包含 HomeFragment、CommunityFragment 和 NotificationFragment。
这是源代码,这是项目的APK。因此,您可以轻松地对其进行测试和改进。
现在,如果我在 HomeFragment 中并单击一个配置文件按钮,那么它会处理到 ProfileFragment 并从那里进行设置等等。单击后退按钮,它会一一完美地返回。但它不会与其他FragmentContainerView. 即使他们直接回到父片段。总的来说,我无法处理不同 ViewPagers 和片段之间的 backstack。
为了避免混淆,FragmentContainers我像这样进行交易
val containerId = (view?.parent as ViewGroup).id
activity?.supportFragmentManager?.beginTransaction()?.add(containerId, profileFragment)?.addToBackStack(null)?.commit()
Run Code Online (Sandbox Code Playgroud)
现在 MainActivity 中 BackPressed() 的处理就在这里
if (view_pager_main_activity?.currentItem == 0)
{
if (view_pager_main_fragment?.currentItem == 0)
{
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view_home)
val appbarHome = findViewById<AppBarLayout>(R.id.appbar_home)
val layoutManager = recyclerView?.layoutManager as LinearLayoutManager
when {
layoutManager.findFirstCompletelyVisibleItemPosition() == 0 -> {
super.onBackPressed() …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager back-stack onbackpressed