我的 android java 应用程序中有一个带有 TabLayout 的 ViewPager2,它有 2 个片段 AudioFoldersFragment 和 VideoFoldersFragment。两个片段都有一个回收器视图,并且在回收器视图中有一些项目(文件夹名称)。音频和视频文件夹片段之间的转换是通过 ViewPager2 和 TabLayout 完成的。
单击项目(文件夹名称)时,我想将该片段替换(假设我单击了 ViewPager2 片段 AudioFoldersFragment 中的一个项目)到新片段 AudioFilesList(其中包含该文件夹内的音频文件列表)。
如何实现这种片段替换?
我尝试使用 FragmentManager 但它不起作用,因为事务需要 FragmentContainerView,但我没有使用它,因为我将 ViewPager2 与 TabLayout 一起使用,这给出了错误 ViewPager2 不支持直接子视图
有什么有效的方法来替换碎片吗?
以下是在 ViewPager2 中替换片段的几种方法:
替换前使用ViewPager2.setUserInputEnabled(false),替换后使用setUserInputEnabled(true)。这可以防止用户在更改片段时滑动。
viewPager.setUserInputEnabled(false);
//替换片段
viewPager.setUserInputEnabled(true);
使用 ViewPager2.setCurrentItem() 更改显示的片段。
viewPager.setCurrentItem(newFragmentIndex, false);
使用 FragmentStateAdapter 并更新数据集/片段列表。
adapter.setFragments(updatedFragmentList); 适配器.notifyDataSetChanged();
使用 FragmentTransaction 替换 ViewPager2 中的片段,例如:
FragmentTransaction事务=fragmentManager.beginTransaction(); transaction.replace(viewPager.getId(), newFragment); transaction.commit();
使用 ViewPager2 适配器方法,setCurrentItem 或 setUserInputEnabled 是最好的。避免 FragmentTransaction 除非你正确处理 backstack。