2013-05-27 3 views
2

Я использую 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, поэтому я предполагаю, что рамки проверки вариантов фрагментов для меня, но мне не нравится, как он это делает. Вот что я имею в виду:

the problem

Сток приложений (телефон, люди и т.д.), а также некоторые другие приложения сделать это правильно. То есть, как только я перехожу на страницу, отображаются пункты меню новой страницы. Но у меня они отображаются только в конце анимации.

Вот то, что я пробовал:

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.

Как исправить это?

ответ

1

Активные приложения (телефон, люди и т. Д.), А также некоторые другие приложения делают это правильно. То есть, как только я перехожу на страницу, отображаются пункты меню новой страницы. Но у меня они отображаются только в конце анимации.

Я не могу воспроизвести ваше поведение с помощью телефона на Galaxy Nexus 4.2.2. Там панель действий не изменяется до тех пор, пока новая страница не будет полностью видна, независимо от того, является ли она броском или салфеткой.

С помощью контактов, я вижу, что вы видите, так как панель действий изменяется, когда палец поднимается вверх, поэтому при переходе изменения происходят быстрее.

Честно говоря, я думаю, что вы делаете гору из мухи. Это, как говорится, единственный способ, с помощью которого можно воспроизвести поведение контактов, - это полностью переопределить FragmentPagerAdapter, удалив setMenuVisibility() звонки с setPrimaryItem(), а затем организуем для этих звонков то, что вы считаете более подходящим временем.

+1

Вы правы в отношении телефона, моя ошибка! Я думаю, что меня беспокоит то, что я видел много сторонних приложений (я просто не могу придумать ни одного), которые не имеют этой проблемы. Я чувствую, что мне где-то не хватает одного глупого звонка. –

Смежные вопросы