Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid FragmentActivity/FragmentPagerAdapter and actionBar update onCreateOptionsMenu
    primarykey
    data
    text
    <p>I have an activity that uses a fragmentpageradapter to create an ics style actionBar. Each page needs to update the actionBar though. Is there a way I can call <code>onCreateOptionsMenu</code> in my <code>onPageSelected</code>?</p> <p>I've trimmed a lot of the code out from the example below for simplicity's sake. </p> <pre><code>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; } } </code></pre> <p><strong>UPDATE</strong> Calling invalidateOptionsMenu() in my onPageSelected() did the trick!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload