gpt4 book ai didi

android - FragmentStatePagerAdapter/更新操作栏标题

转载 作者:行者123 更新时间:2023-11-29 18:00:30 27 4
gpt4 key购买 nike

我有一个 ViewPager+FragmentStatePagerAdapter 主机 Activity ,它让我可以浏览一组 fragment (同一 ItemFragment 类的不同实例),并且用于填充每个 fragment 的数据是从网络中获取的。

现在,当我滑动时,我想用来自当前 fragment 的属性更新操作栏标题,所以我使用 OnPageChangeListener/onPageSelected 来完成这项工作:

...
@Override
public void onPageSelected(int position) {
MyFragment currentFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.view_pager);
getSupportActionBar().setTitle(currentFragment.propertyIWantToUseAsTitle);
}
...

我有几个疑问:

  • 我正在检索真正的当前 fragment 吗? FragmentStatePageAdapter 没有为每个 fragment 设置标签,所以除了使用 ViewGroup 容器之外,我不知道还有什么其他方法可以获取当前 fragment
  • 当调用 onPageSelected 时,添加的 fragment 可能仍在获取我需要设置操作栏标题的数据,导致 npe。

在上述场景中,保存更新操作栏标题的逻辑的最佳位置是什么?

附言。我尝试了一种混合方法,将代码添加到 MyFragment 以在我需要的数据可用时更新 ab。问题是很少有 fragment 被提前加载,操作栏标题随着 fragment 加载完成而改变。结果是 ab 标题是来自前面几页 fragment 的随机标题。

在此先感谢您的帮助!

最佳答案

我在 Fragment 本身中设置了 ActionBar 标题。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Bundle extras = getActivity().getIntent().getExtras();
type = (String) extras.getString("type");
}// end method

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);

if (isVisibleToUser) {
Activity activity = getActivity();
ActionBar actionBar = activity.getActionBar();

if (type.equals("one")) {
actionBar.setTitle(R.string.one);
}
if (type.equals("two")) {
actionBar.setTitle(R.string.two);
}
if (type.equals("three")) {
actionBar.setTitle(R.string.three);
}
}
}//end method

关于android - FragmentStatePagerAdapter/更新操作栏标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com