有没有办法使用导航图从一个片段滑动到另一个片段?

时间:2021-03-28 21:16:14

标签: android android-fragments android-viewpager android-architecture-navigation

所以我有一个包含 2 个片段 ( FragA, FragB ) 的导航图,我希望能够通过向左或向右滑动来从一个片段移动到另一个片段。我有一个将 FragA 连接到 FragB 的操作,我已经使用它通过单击按钮从 FragA 淡入到 FragB。但是,我希望能够在 FragA 上向左滑动以到达 FragB 并反向返回。

编辑:我正在尝试使用导航而不是 ViewPager,因为 FragA 还通过导航图连接到另一个片段。现在我正在尝试将导航组件和 viewpager 结合起来,但我想要一个只有导航组件的解决方案。

1 个答案:

答案 0 :(得分:0)

显然,在导航旁边使用 ViewPager 并没有那么复杂。我是这样做的。

  • 在我的 activity_main.xml 中添加了一个 androidx.viewpager2.widgit.ViewPager2
  • 添加了一个 java 类 PagerAdapter extends FragmentStateAdapter
    • 我使用了以 FragmentManager 和 Lifecycle 作为参数的默认构造函数
    • 已实现的方法
      • createFragment 在位置 = 0 时返回 FragA,在位置 = 2 时返回 FragB
      • getcount 返回 2(因为我只有 2 个片段)

在 MainActivity onCreate

  • 创建了 ViewPager2 的最终实例并将其设置为我的 activity_main.xml 中的 ViewPager2
  • 创建一个新的 PagerAdapter 实例,将 getSupportFragmentManager()、getLifecycle() 作为参数
  • 将 viewpager 适配器设置为 pageradapter

这正是我想要的,而不是我认为我需要的方式。

你可以在这里停下来,但现在突然出现一个小问题。如果您按下后退按钮希望撤消导航图中的导航操作,该应用将改为在主要活动级别执行按下后退按钮预期执行的操作。

只需将其复制到导航图的片段中,按回按即可撤消将您带到的导航操作

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    OnBackPressedCallback callback = new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            popNavBackStack();
        }
    };
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}

public void popNavBackStack(){
    NavController journalNavHost = NavHostFragment.findNavController(this);
    journalNavHost.popBackStack();
}