当前位置: 首页 > news >正文

Fragment两种切换方式

方法 1: 添加并显示/隐藏 Fragment

你可以使用事务添加多个 Fragment 到同一个容器中,然后通过显示或隐藏不同的 Fragment 来达到切换的效果。

private void updateFragments(Fragment selectedFragment) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 遍历所有已添加的Fragment,将它们全部隐藏List<Fragment> fragments = fragmentManager.getFragments();if (fragments != null) {for (Fragment fragment : fragments) {if (fragment != null) {fragmentTransaction.hide(fragment);}}}// 显示选中的Fragmentif (selectedFragment != null) {String tag = selectedFragment.getClass().getSimpleName();// 查找已存在的FragmentFragment existingFragment = fragmentManager.findFragmentByTag(tag);if (existingFragment != null) {fragmentTransaction.show(existingFragment);// 强制重新加载数据existingFragment.requireActivity().runOnUiThread(() -> ((YourFragmentClass) existingFragment).loadData());} else {// 添加新的FragmentfragmentTransaction.add(R.id.fragment_container_view, selectedFragment, tag);// 强制重新加载数据selectedFragment.requireActivity().runOnUiThread(() -> ((YourFragmentClass) selectedFragment).loadData());}}// 提交事务try {fragmentTransaction.commit();} catch (IllegalStateException e) {// 处理事务提交失败的情况,例如Activity已被销毁Log.e("FragmentManager", "Failed to commit transaction", e);}
}

方法 2: 替换并移除旧的 Fragment

如果你希望每次切换时都保留一个新的 Fragment 并移除旧的 Fragment,可以这样做:

1private void updateFragments(Fragment selectedFragment) {
2    if (selectedFragment != null) {
3        FragmentManager fragmentManager = getSupportFragmentManager();
4        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
5
6        // 移除旧的Fragment
7        Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_container_view);
8        if (currentFragment != null && currentFragment != selectedFragment) {
9            fragmentTransaction.remove(currentFragment);
10        }
11
12        // 添加新的Fragment
13        fragmentTransaction.add(R.id.fragment_container_view, selectedFragment);
14
15        fragmentTransaction.commit();
16    }
17}

注意事项

  • 当使用 show 和 hide 方法时,你需要确保所有的 Fragment 都已经通过 add 方法添加到容器中。
  • 使用 remove 方法时要小心,因为它会从 FragmentManager 中完全移除 Fragment。如果你之后还想重新显示某个 Fragment,那么需要再次创建它。
  • 无论哪种方法,都要确保 FragmentTransaction 正确地提交了事务。

选择哪种方法取决于你的具体需求。如果你只是想简单地切换当前显示的 Fragment,而不需要保留所有 Fragment 的状态,那么第二种方法可能是更好的选择。如果你需要多个 Fragment 共存,并且可以在任何时候切换回来,那么第一种方法会更适合。


http://www.mrgr.cn/news/34262.html

相关文章:

  • UNIAPP发布小程序调用讯飞在线语音合成+实时播报
  • MYSQL 库,表 基本操作
  • 数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)
  • 【api】java和python联动
  • 基于Spring Boot与Redis的令牌主动失效机制实现
  • 【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost
  • 1. IP地址介绍
  • 2024年信息安全企业CRM选型与应用研究报告
  • 辛普森积分公式
  • CCPQT:2024年10月珠海学术会议
  • C#常用数据结构栈的介绍
  • 编译uboot出现 multiple definition of `yylloc‘ 问题
  • 探索未来科技前沿:云计算与大数据的深度融合
  • 基于TCP协议的网络通信
  • Android OpenGLES2.0开发(二):环境搭建
  • 塑料清洗加工污水处理具体流程和效果说明
  • 为什么越来越多的网工运维转行网络安全?_idc运维转网络安全工程师_系统运维转行网安
  • 【行为树】01-第一棵树
  • 商标管理软件如何助力企业实现商标数字化管理?
  • 怎么录屏?免费录屏软件推荐,电脑屏幕与摄像头内容录制与分享指南
  • tomcat项目【jvm内存溢出】
  • 大数据新视界 --大数据大厂之 Vue.js 与大数据可视化:打造惊艳的数据界面
  • Spring AOP - 注解方式实现
  • Redis Sorted Set 跳表的实现原理和分析
  • 简单使用tesseract-ocr提取图片中的文字
  • angular封装好的组件的收到原生输入框的change事件