Navigation Drawer Activity中跳转Fragment时如何清空原Fragment全部数据?
问题对应解决方案
方案1:监听导航目的地变化主动触发清空
在宿主MainActivity中监听导航事件,当跳转到Gallery Fragment时主动调用Home Fragment的清空方法,适配Navigation组件的原生逻辑:
// MainActivity.kt onCreate 方法内添加 val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_content_main) as NavHostFragment val navController = navHostFragment.navController navController.addOnDestinationChangedListener { _, destination, _ -> // 当导航目标为Gallery Fragment时执行清空逻辑 if (destination.id == R.id.gallery_fragment) { val homeFragment = supportFragmentManager.findFragmentByTag("f${R.id.home_fragment}") as? HomeFragment // 调用HomeFragment公开的清空方法 homeFragment?.clearAllLoadedData() } }
在HomeFragment中新增统一的清空方法,处理所有已加载数据的重置:
// HomeFragment.kt 新增方法 fun clearAllLoadedData() { // 清空列表数据 loadedDataList.clear() // 重置适配器 homeAdapter.submitList(emptyList()) // 清空所有持有的业务数据引用 currentSelectedItem = null loadedPageNum = 0 // 其他需要重置的状态变量统一在此处理 }
方案2:使用共享ViewModel统一管理数据(更推荐)
将两个Fragment共用的业务数据存放在和宿主Activity生命周期绑定的共享ViewModel中,无需跨Fragment调用方法,数据变更自动同步:
// SharedViewModel.kt 全局共享数据层 class SharedViewModel : ViewModel() { // Home页所有数据统一存在ViewModel中,避免Fragment直接持有 val homePageData = MutableLiveData<List<HomeDataItem>>() }
HomeFragment中只做数据观察,不单独持有数据副本:
// HomeFragment.kt onViewCreated 内逻辑 val sharedViewModel = ViewModelProvider(requireActivity())[SharedViewModel::class.java] sharedViewModel.homePageData.observe(viewLifecycleOwner) { data -> // 数据变化时自动更新UI homeAdapter.submitList(data) }
GalleryFragment中删除数据时直接更新ViewModel中的数据源,无需关心HomeFragment的状态:
// GalleryFragment.kt 执行删除操作后 val sharedViewModel = ViewModelProvider(requireActivity())[SharedViewModel::class.java] // 直接清空共享数据源,HomeFragment恢复显示时会自动拿到空数据,不会触发空指针 sharedViewModel.homePageData.postValue(emptyList())
注意事项
- 禁止在GalleryFragment中直接持有HomeFragment的强引用,避免内存泄漏和空指针异常
- 所有可变业务状态优先存储在ViewModel层,不要在Fragment成员变量中存不可恢复的业务数据
- 可在HomeFragment的
onResume方法中添加数据判空逻辑,数据为空时自动触发重新加载 - 所有访问数据的逻辑提前加判空保护,比如
if (loadedDataList?.isNotEmpty() == true) { 执行业务逻辑 }
内容的提问来源于stack exchange,提问作者Usman Haider
相关产品推荐
相关产品推荐

