我使用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
相比,它有相當大的延遲。
我該如何解決這個問題?
你說的對,電話,我的錯!我想我感到困擾的是,我看到很多第三方應用程序(我無法想象)沒有這個問題。我覺得我在某個地方錯過了一個愚蠢的小電話。 –