【发布时间】:2013-05-11 00:05:55
【问题描述】:
我有一个带有 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。
在上述场景中保持更新操作栏标题的逻辑的最佳位置是什么?
ps。我尝试了一种混合方法,将代码添加到 MyFragment 以在我需要的数据可用时更新 ab。问题是很少有片段被提前加载,并且随着片段完成加载而动作栏标题发生变化。结果是 ab 标题是来自前几页片段的随机标题。
提前感谢您的帮助!
【问题讨论】:
-
“我正在检索真正的当前片段吗?” -- 也许现在,但您依赖于
ViewPager实现细节,这是有风险的。 “FragmentStatePageAdapter 没有为每个片段设置标签”——您是否仅限于使用FragmentStatePagerAdapter? “在上述场景中,保持更新操作栏标题的逻辑的最佳位置是什么?” - 是的,我真的需要为此制定一个解决方案。它现在正式在我的待办事项清单上。 -
感谢@CommonsWare,我刚刚成功,但我担心内存使用情况。看看这里gist.github.com/gwvatieri/5544164
标签: android android-fragments android-actionbar android-viewpager