android - 导航架构组件 - BottomNavigationView 避免 fragment 重新加载

标签 android android-fragments android-navigation android-architecture-navigation

我正在使用 BottomNavigationView 来显示我的导航图中的一堆 fragment 。

底部导航在我的 MainActivity 中设置如下:

val navController = findNavController(R.id.mainNavigationFragment)
setupActionBarWithNavController(navController)
bottomNavigationView.setupWithNavController(navController)

每个 fragment 都有自己的 FragmentScoped viewmodel 来提供其内容。

循环浏览 bottomnavview 中的每个选项卡,我看到正在重新创建的 fragment ,这反过来会导致为该 fragment 创建一个新的 viewmodel 实例。 这会导致新的 api 调用再次获取数据。

如何避免重新获取这些数据?

我知道我可以做到这些:

  1. 使用 Activity View 模型来托管所有这些数据,但这只会 为我的所有 fragment 制作一个单一的 View 模型托管数据。

  2. 缓存 api 响应,以便 fragment 重新创建 从缓存中获取数据,而不是进行新的网络调用

是否有任何平台提供了我可以遵循的最佳实践来避免每次重新获取数据?

谢谢

最佳答案

我修复了这个行为(经过几个小时的研究,因为由于一些我无法解释的布局不一致,覆盖 setOnNavigationItemSelectedListener 不是一个选项):

                                        | | | | |
                                        v v v v v 
bottomNavigationView.setOnNavigationItemReselectedListener(
    item -> Log.d(MY_TAG, "navigation item " + item.getTitle() + " reselected")
);

bottomNavigationView.setOnNavigationItemReselectedListener(item -> { } );

如果您不想要 Log 条目 :)

关于android - 导航架构组件 - BottomNavigationView 避免 fragment 重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59759186/

相关文章:

android - 无法使用 SharedPreferences 更改文本

android - 在 onCreateView 之外使用 android Inflate

android - 带 Activity 的抽屉导航和。带 fragment 的抽屉导航

android - 如何在 Android 中使用导航 Controller 组件返回根 fragment 或层次结构的顶部?

android - 在三星设备上的应用程序中强制使用 Holo UI

android - 来自 androidx.core :core:1. 0.0 和 com.android.support :support-compat:26. 1.0 的重复类

android - RecyclerView 未显示(正在显示)

android - 在 Android 支持库中自定义导航 View

Android导航组件+登录流程+嵌套BottomNavigationView

Android - Textview 中的版本名称在 appstoreupdate 上无法正常工作