我正在使用 BottomNavigationView
来显示我的导航图中的一堆 fragment 。
底部导航在我的 MainActivity
中设置如下:
val navController = findNavController(R.id.mainNavigationFragment)
setupActionBarWithNavController(navController)
bottomNavigationView.setupWithNavController(navController)
每个 fragment 都有自己的 FragmentScoped viewmodel
来提供其内容。
循环浏览 bottomnavview
中的每个选项卡,我看到正在重新创建的 fragment ,这反过来会导致为该 fragment 创建一个新的 viewmodel 实例。
这会导致新的 api 调用再次获取数据。
如何避免重新获取这些数据?
我知道我可以做到这些:
使用 Activity View 模型来托管所有这些数据,但这只会 为我的所有 fragment 制作一个单一的 View 模型托管数据。
缓存 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/