我有一个带有 ViewPager+FragmentStatePagerAdapter 的主机活动,它让我可以浏览一组片段(同一个 ItemFragment 类的不同实例),并且用于填充每个片段的数据是从网络中获取的。
现在,当我滑动时,我想使用来自当前片段的属性更新操作栏标题,所以我使用 OnPageChangeListener/onPageSelected 来完成这项工作:
...
@Override
public void onPageSelected(int position) {
MyFragment currentFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.view_pager);
getSupportActionBar().setTitle(currentFragment.propertyIWantToUseAsTitle);
}
...
我在这里有几个疑问:
- 我正在检索真正的当前片段吗?FragmentStatePageAdapter 没有为每个片段设置标签,所以我不知道有什么其他方法可以获取当前片段,而不是使用 ViewGroup 容器
- 当 onPageSelected 被调用时,添加的片段可能仍在获取我需要设置导致 npe 的操作栏标题的数据。
在上述场景中保持更新操作栏标题的逻辑的最佳位置是什么?
附言。我尝试了一种混合方法,将代码添加到 MyFragment 以在我需要的数据可用时更新 ab。问题是很少有片段被提前加载,并且随着片段完成加载而动作栏标题发生变化。结果是 ab 标题是来自前面几页片段的随机标题。
提前感谢您的帮助!