Я использую ActionBarSherlock, и в моем основном действии есть ViewPager с тремя страницами, все из которых являются фрагментами. Один из этих фрагментов имеет метод onCreateOptionsMenu
, а панель действий в основной деятельности обновляется правильно. Вот метод:Элементы панели действий из фрагмента ViewPager, появляющегося после задержки
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
, поэтому я предполагаю, что рамки проверки вариантов фрагментов для меня, но мне не нравится, как он это делает. Вот что я имею в виду:
Сток приложений (телефон, люди и т.д.), а также некоторые другие приложения сделать это правильно. То есть, как только я перехожу на страницу, отображаются пункты меню новой страницы. Но у меня они отображаются только в конце анимации.
Вот то, что я пробовал:
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
.
Как исправить это?
Вы правы в отношении телефона, моя ошибка! Я думаю, что меня беспокоит то, что я видел много сторонних приложений (я просто не могу придумать ни одного), которые не имеют этой проблемы. Я чувствую, что мне где-то не хватает одного глупого звонка. –