【发布时间】:2013-05-27 18:54:25
【问题描述】:
我正在使用 ActionBarSherlock,我的主要活动有一个包含三个页面的 ViewPager,它们都是片段。其中一个片段有一个onCreateOptionsMenu 方法,并且主活动中的操作栏已正确更新......有点。方法如下:
public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu, com.actionbarsherlock.view.MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.search, menu);
// A couple of other things
}
我正在使用自定义FragmentPagerAdapter:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
FragmentManager fm;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
this.fm = fm;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
accountFragment = Account.newInstance();
return accountFragment;
case 1:
filesFragment = Files.newInstance();
return filesFragment;
case 2:
transfersFragment = Transfers.newInstance();
return transfersFragment;
}
return null;
}
private String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return titleAccount;
case 1:
return titleFiles;
case 2:
return titleTransfers;
}
return null;
}
}
我的活动中根本没有调用supportInvalidateOptionsMenu 的代码,所以我假设框架正在为我检查片段的选项菜单,但我不喜欢它的工作方式。这就是我的意思:
Stock 应用(电话、人脉等)以及其他一些应用可以正确执行此操作。也就是说,只要我跳转到一个页面,就会显示该新页面的菜单项。但在我的,它们只在滑动动画结束时显示。
这是我尝试过的:
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
supportInvalidateOptionsMenu();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
@Override
public void onPageScrollStateChanged(int arg0) {}
});
这似乎没有任何作用。
日志显示当我滑动到另一个页面时,onPageSelected 被正确调用,这是我想要更新项目的时候。登录我的片段的onCreateOptionsMenu 显示它仅在动画结束时调用,这与调用onPageSelected 时有相当大的延迟。
我该如何解决这个问题?
【问题讨论】:
标签: android android-fragments android-actionbar