我有一个ViewPager + FragmentStatePagerAdapter的主机活动,让我可以浏览一组片段(同一个ItemFragment类的不同实例),并从网络中提取用于填充每个片段的数据。
现在,当我滑动时,我想用来自当前片段的属性更新操作栏标题,所以我使用OnPageChangeListener / onPageSelected来完成这项工作:
...
@Override
public void onPageSelected(int position) {
MyFragment currentFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.view_pager);
getSupportActionBar().setTitle(currentFragment.propertyIWantToUseAsTitle);
}
...
我有几个疑问:
在上述场景中保留更新操作栏标题逻辑的最佳位置是什么?
PS。我尝试了一种混合方法,在MyFragment中添加代码,以便在我需要的数据可用时更新ab。问题是前面加载了很少的片段,当片段完成加载时,操作栏标题会发生变化。结果是ab标题是一个随机标题,来自前面几页的片段。
提前感谢您的帮助!
答案 0 :(得分:3)
我在ActionBar
本身设置了Fragment
标题。
@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
答案 1 :(得分:0)
AFAICT,当新页面设置为"当前"时,应使用PagerAdapter
调用setPrimaryItem()
。您可以覆盖该方法,链接到超类,然后将Object
(第一个参数转换为setPrimaryItem()
)转换为相应的Fragment
类并对其执行某些操作。那"东西"可能会将其存储在PagerAdapter
的数据成员中(例如currentPage
),并添加一个getter以便以后检索它。