Android FragmentActivity / FragmentPagerAdapter和actionBar更新onCreateOptionsMenu

时间:2012-03-17 18:08:00

标签: android android-fragments android-actionbar android-viewpager

我有一个使用fragmentpageradapter创建ics风格actionBar的活动。每个页面都需要更新actionBar。有没有办法可以在onCreateOptionsMenu中致电onPageSelected

为了简单起见,我从下面的例子中删除了很多代码。

public class ListFragmentViewPagerActivity extends FragmentActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thread_view);

        ViewPager pager = (ViewPager) findViewById(android.R.id.list);
        pager.setAdapter(new ExamplePagerAdapter(getSupportFragmentManager()));
        TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicator);
        indicator.setViewPager(pager);
        indicator.setOnPageChangeListener(new OnPageChangeListener() {
             @Override
             public void onPageSelected(int position) {

                 }

            @Override
            public void onPageScrollStateChanged(int arg0) {                
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {                
            }
        });
    }

    public class ExamplePagerAdapter extends FragmentPagerAdapter implements TitleProvider{

        public ExamplePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return URLS.size();
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fragment = new ThreadFragment();

            // set arguments here, if required
            Bundle args = new Bundle();
            fragment.setArguments(args);

            return fragment;
        }

        @Override
        public String getTitle(int pos) {
            return TITLES.get(pos);
        }

    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuinflate = new MenuInflater(this);
        menuinflate.inflate(R.menu.thread_menu, menu);
        if (type.equals("xda")) {
            menu.removeItem(R.id.ss_view);
        }

            //This worked when I only needed to call it one time. I need to update this menu for each page in my viewPager though.
        if (isFav) {
            menu.getItem(2).setIcon(R.drawable.fav_ab);
        }
        return true;        
    }   

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent(this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            break;
            case R.id.ss_view:
                Intent ssi = new Intent(this, SSActivity.class);
                ssi.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                Bundle b = new Bundle();
                ssi.putExtras(b);
                startActivity(ssi);
            break;
            case R.id.restart:
            break;
            case R.id.fav_ab:
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        return false;
    }    
}

更新 在我的onPageSelected()中调用invalidateOptionsMenu()就可以了![/ p>

1 个答案:

答案 0 :(得分:2)

使用invalidateOptionsMenu(),但如果你支持低于3.0的任何标记,请确保将其包装在trycatch中,因为此方法不存在且会崩溃!

如果您想要在3.0之前的设备上更新菜单,请覆盖onPrepareOptionsMenu(),每次打开菜单时都会调用它。